home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 October / CHIP Turkiye Ekim 2000.iso / prog / naps / 16 / ChangeLog < prev    next >
Encoding:
Text File  |  2000-07-23  |  118.8 KB  |  3,319 lines

  1. 2000-07-20  drscholl  <drscholl@users.sourceforge.net>
  2.  
  3.     * login.c:
  4.     clone checker and max connections should only be checked for user logins,
  5.     not server logins.
  6.  
  7.     * napster.txt:
  8.     updated napster.txt on the 870 (add directory) command
  9.  
  10.     * add_file.c, handler.c, search.c:
  11.     fixed possible buffer overrun in add_directory()
  12.  
  13.     fixed handle_connection() to avoid sending MSG_SERVER_USER_SHARING commands
  14.     after every MSG_CLIENT_ADD_DIRECTORY command.
  15.  
  16.     added the server from which the command came to the log() messages generated
  17.     by remote_search() and remote_search_result()
  18.  
  19. 2000-07-16  drscholl  <drscholl@users.sourceforge.net>
  20.  
  21.     * config.c, login.c, main.c, opennap.h, sample.conf:
  22.     added clone checking controlled by new `max_clones' config var.
  23.  
  24. 2000-07-13  drscholl  <drscholl@users.sourceforge.net>
  25.  
  26.     * browse.c:
  27.     fixed bug in new_browse() where no results would be returned in
  28.     max_browse_results was set to 0 (which should mean unlimited)
  29.  
  30. 2000-07-08  drscholl  <drscholl@users.sourceforge.net>
  31.  
  32.     * add_file.c, configure.in, opennap.h:
  33.     fixed buffer overflow in add_directory() when the directory portion of the
  34.     filename was >=255 chars
  35.  
  36. 2000-07-06  drscholl  <drscholl@users.sourceforge.net>
  37.  
  38.     * server_usage.c:
  39.     added bytes in and bytes out to the server stats
  40.  
  41. 2000-07-02  drscholl  <drscholl@users.sourceforge.net>
  42.  
  43.     * README, opennap.h, privmsg.c:
  44.     changed rehash numeric to 10117 to avoid conflict with old server ping
  45.     numeric
  46.  
  47.     added `rehash' to the list of operserv commands
  48.  
  49.     * README, config.c, handler.c, opennap.h:
  50.     added rehash (10116) command to cause a server to reload it config files
  51.  
  52.     * README, add_file.c, server_connect.c:
  53.     log message for bitrateToMask() said freqToMask
  54.  
  55.     server_connect should check for missing host argument
  56.  
  57. 2000-06-30  drscholl  <drscholl@users.sourceforge.net>
  58.  
  59.     * muzzle.c:
  60.     added missing return when attempting to unmuzzle a user that isnt muzzled
  61.  
  62. 2000-06-29  drscholl  <drscholl@users.sourceforge.net>
  63.  
  64.     * channel.c:
  65.     channel_voice() did not check for permission to execute the command
  66.  
  67.     * browse.c, channel.c, muzzle.c, serverlib.c:
  68.     fixed compilation warnings about unused `len'
  69.  
  70.     pop_user_server() had a bad log() message with the message tag value causing
  71.     a segfault
  72.  
  73.     muzzle() should ensure that db is not NULL before using it
  74.  
  75. 2000-06-27  drscholl  <drscholl@users.sourceforge.net>
  76.  
  77.     * whois.c:
  78.     append_string() allocated extra space but didnt copy the data to append
  79.  
  80.     * channel.c, join.c:
  81.     bugfixes from panasync.  join() was setting the wrong user to channel
  82.     operator since chanUser was reused for sending a join message to all clients
  83.     in the channel.
  84.  
  85.     in channel_muzzle(), need to check for sender!=NULL when checking the user
  86.     level permission
  87.  
  88. 2000-06-26  drscholl  <drscholl@users.sourceforge.net>
  89.  
  90.     * browse.c, channel.c, muzzle.c, whois.c:
  91.     muzzled users should not be able to channel wallop
  92.  
  93. 2000-06-24  drscholl  <drscholl@users.sourceforge.net>
  94.  
  95.     * ChangeLog, NEWS, README:
  96.     post 0.34 release commit
  97.  
  98. 2000-06-23  drscholl  <drscholl@users.sourceforge.net>
  99.  
  100.     * TODO, channel.c:
  101.     channel_mode should not allow a user below the channel level to change
  102.     the mode
  103.  
  104. 2000-06-22  drscholl  <drscholl@users.sourceforge.net>
  105.  
  106.     * Makefile.in, README, channel.c, handler.c, opennap.h, privmsg.c, public.c, serverlib.c, synch.c:
  107.     added channel voice and muzzle commands
  108.  
  109.     * channel.c, join.c, opennap.h, usermode.c:
  110.     removed channel and topic usermode flags since they are no longer used
  111.  
  112.     reworked join() to allow channel ops to bypass the +INVITE and limit checks
  113.  
  114.     * channel.c, configure, configure.in, join.c, kick.c, opennap.h, topic.c:
  115.     updated version to 0.34
  116.  
  117.     removed notify_mods() from all channel specific calls.  notify_ops() will
  118.     now notify mods+ in the channel.
  119.  
  120. 2000-06-21  drscholl  <drscholl@users.sourceforge.net>
  121.  
  122.     * napster.txt, privmsg.c:
  123.     added invite and mode command to chanserv
  124.  
  125.     * README, browse.c, handler.c, opennap.h, whois.c:
  126.     added new experimental browse command (10301/10302) for more compact browse
  127.     listings
  128.  
  129. 2000-06-19  drscholl  <drscholl@users.sourceforge.net>
  130.  
  131.     * README, channel.c, opennap.h, synch.c, topic.c:
  132.     added +TOPIC channel mode to allow any user to change the topic
  133.  
  134. 2000-06-17  drscholl  <drscholl@users.sourceforge.net>
  135.  
  136.     * channel.c:
  137.     invite message printed the wrong user for who issued the invite
  138.  
  139.     * README, channel.c, free_user.c, handler.c, join.c, opennap.h, serverlib.c, synch.c, util.c:
  140.     added +INVITE channel mode
  141.  
  142.     * README, channel.c, opennap.h, public.c, synch.c:
  143.     added +MODERATED channel mode - only ops and mods+ can speak in public
  144.  
  145.     * README, channel.c, handler.c, join.c, list_channels.c, opennap.h, part_channel.c, synch.c, whois.c:
  146.     added channel_mode(10209) command
  147.  
  148.     added +PRIVATE channel mode to make the channel not show up in the channel
  149.     lists or whois response
  150.  
  151. 2000-06-15  drscholl  <drscholl@users.sourceforge.net>
  152.  
  153.     * network.c: solaris doesnt define INADDR_NONE
  154.  
  155.     * buffer.c:
  156.     avoid coredump in queue_data() when buffer_new() fails
  157.  
  158.     * search.c, server_usage.c:
  159.     server stat message should use %u for the number of total kbytes
  160.  
  161.     search expected "EQUALS" intead of "EQUAL TO"
  162.  
  163. 2000-06-14  drscholl  <drscholl@users.sourceforge.net>
  164.  
  165.     * README, channel.c, handler.c, opennap.h, privmsg.c:
  166.     added channel_wallop (10208) command to send a message to all mods+ and
  167.     channel operators for a specified channel
  168.  
  169.     * config.c:
  170.     default max_nick_length changed to 19 since the win32 napster client can't
  171.     cope with anything longer than this
  172.  
  173.     * userdb.c:
  174.     expired nicks weren't removed from User_Db until the server restarted
  175.  
  176.     * login.c, userdb.c:
  177.     need to use strtoul() to convert ip address from string to unsigned int
  178.     instead of atoi()
  179.  
  180.     * Makefile.am, Makefile.in, add_file.c, buffer.c, free_user.c, init.c, login.c, main.c, mempool.c, mempool.h, opennap.h, remove_connection.c, search.c, serverlib.c:
  181.     removed mempool code.  it turned out to be less efficient that malloc/free
  182.  
  183. 2000-06-13  drscholl  <drscholl@users.sourceforge.net>
  184.  
  185.     * buffer.c, login.c, server_connect.c, server_login.c, serverlib.c:
  186.     buffer_queue() did not set the .datasize after copying data
  187.  
  188.     * buffer.c:
  189.     fixed buffer_queue() to handle input larger than BUFFER_SIZE bytes
  190.  
  191.     * remove_connection.c:
  192.     fixed memory leak with free'g the input buffers for client connections
  193.  
  194.     * buffer.c: fixed bug in buffer_compress()
  195.  
  196.     * buffer.c, debug.c, free_user.c, init.c, login.c, main.c, mempool.c, opennap.h, remove_connection.c, serverlib.c, util.c:
  197.     added memory pool management for users, connections, send queue buffers
  198.  
  199.     * Makefile.am, Makefile.in, add_file.c, init.c, main.c, mempool.c, mempool.h, opennap.h, search.c:
  200.     added initial support for memory pools
  201.  
  202. 2000-06-11  drscholl  <drscholl@users.sourceforge.net>
  203.  
  204.     * README, login.c:
  205.     servers should not issue KILL messages to the server from which a nick
  206.     collision occurs
  207.  
  208. 2000-06-10  drscholl  <drscholl@users.sourceforge.net>
  209.  
  210.     * setup.c, Makefile.in, TODO, search.c:
  211.     rewrote search_internal() to be able to parse arbitrary length search
  212.     strings
  213.  
  214.     setup should create files as -rw-------
  215.  
  216.     * Makefile.in, TODO, configure, configure.in, free_user.c, kill_user.c, login.c, opennap.h, synch.c:
  217.     added .killed member to CONNECTION so that a QUIT is not issued when a local
  218.     user is killed (the KILL is sufficient)
  219.  
  220.     consolodated the MSG_SERVER_USER_IP message into MSG_CLIENT_LOGIN so that
  221.     nick collision can be handled more gracefully.  This allows the server to
  222.     reject the newer user instead of rejecting both clients.
  223.  
  224. 2000-06-09  drscholl  <drscholl@users.sourceforge.net>
  225.  
  226.     * Makefile.in, channel.c, configure, configure.in, muzzle.c:
  227.     check for -lsocket (needed for os/2)
  228.  
  229.     fixed segfault in muzzle() for log message when the user is already muzzled
  230.     and the user is not logged in
  231.  
  232.     * NEWS, README, configure, configure.in, opennap.h:
  233.     post 0.32 commit
  234.  
  235. 2000-06-08  drscholl  <drscholl@users.sourceforge.net>
  236.  
  237.     * channel.c, login.c:
  238.     bug in channel_op() allows any user to make themself a channel operator.
  239.     missing a return statement after the permission denied message
  240.  
  241.     servers now synch the user level when a user logs in to ensure all servers
  242.     have the same settings
  243.  
  244.     * Makefile.in, NEWS, README, motd.c, opennap.h, opennap.opt, setup.dsp, ChangeLog:
  245.     updated for 0.31 release
  246.  
  247.     motd.c was missing stdlib.h for free()
  248.  
  249.     updated project files for Win32 build
  250.  
  251.     * server_login.c:
  252.     server link log messages are important after all
  253.  
  254. 2000-06-08  drscholl  <drscholl@users.sourceforge.net>
  255.  
  256.     * server_login.c:
  257.     server link log messages are important after all
  258.  
  259.     * kill_user.c, search.c:
  260.     removed log() message from kill_user().  notify_mods() is sufficient
  261.  
  262.  
  263.     removed old log() in search_callback().  problem seems to be fixed.
  264.  
  265.     * server_login.c:
  266.     added more notify_mods() calls in server_login() indicating server link
  267.     failures
  268.  
  269. 2000-06-07  drscholl  <drscholl@users.sourceforge.net>
  270.  
  271.     * motd.c:
  272.     the motd file is now loaded into memory once at startup to reduce the
  273.     overhead of fileio every time a user logs in
  274.  
  275. 2000-06-06  drscholl  <drscholl@users.sourceforge.net>
  276.  
  277.     * search.c:
  278.     removed log message for bitrate test since it seems to be working
  279.  
  280.     * search.c:
  281.     added a log() message to search_callback() to print why the minbitrate test
  282.     fails for a search to track down the problem we have seen
  283.  
  284.     * list_users.c:
  285.     added new flags to global_user_list():
  286.         z    muzzled users
  287.         c    cloaked users
  288.  
  289.     * ban.c, login.c, main.c, opennap.h, util.c:
  290.     moved check for ip bans to login() so that the user name can be printed in
  291.     the mod notification
  292.  
  293.     fixed ban save/load to store all bans in the long format.  bans are now
  294.     restored to the same order they were dumped, so that the older bans are last
  295.  
  296.     * search.c:
  297.     max linespeed and frequency checked for "at most" when the correct string is
  298.     "at best"
  299.  
  300. 2000-06-05  drscholl  <drscholl@users.sourceforge.net>
  301.  
  302.     * search.c:
  303.     "at most" qualifiers were not passed to peer servers properly
  304.  
  305.     * tresolv.c, tresolv.h, whois.c, Makefile.am, Makefile.in, configure, configure.in, main.c:
  306.     removed tresolv code since it wont work effectively
  307.  
  308. 2000-06-04  drscholl  <drscholl@users.sourceforge.net>
  309.  
  310.     * search.c:
  311.     bitrate/samplerate search criteria weren't using BitRate and SampleRate
  312.  
  313.     * configure, free_user.c, login.c, opennap.h, serverlib.c, whois.c:
  314.     initial changes to integrate support for dns names in opennap
  315.  
  316.     * configure, configure.in, whois.c:
  317.     changed whois to report the dns name for local users
  318.  
  319.     * Makefile.am, Makefile.in, ban.c, configure, configure.in, main.c, tresolv.c, tresolv.h:
  320.     added threaded dns lookup routines
  321.  
  322. 2000-06-03  drscholl  <drscholl@users.sourceforge.net>
  323.  
  324.     * README, configure, configure.in, privmsg.c:
  325.     changed server link documentation in README to only describe the method of
  326.     putting both passwords in the file
  327.  
  328.     added op and deop commands to chanserv.  removed help for these items in
  329.     operserv.
  330.  
  331.     * config.c:
  332.     allow mods+ to query config variables but not set them
  333.  
  334.     * main.c, server_connect.c:
  335.     added notify_mods() to report server link failures
  336.  
  337.     * search.c:
  338.     added "mp3z" to the list of tokens to ignore in filenames
  339.  
  340.     * change.c, handler.c, opennap.h:
  341.     accept the change_email command even if its not supported
  342.  
  343.     * login.c:
  344.     removed extraneous log messages from login()
  345.  
  346.     added notify_mods() message to register_user()
  347.  
  348.     * add_file.c, remove_file.c:
  349.     removed log message from remove_file() when the file requested is not shared
  350.  
  351.     removed log message from add_file() for duplicates
  352.  
  353.     instead of calling strlen() just calculate the difference between av[0] and
  354.     av[1] to detect long filenames in add_file/share_file
  355.  
  356.     * main.c, server_usage.c:
  357.     added number of registered users to the server stats command
  358.  
  359.     * add_file.c, config.c, init.c, main.c, motd.c, opennap.h, search.c:
  360.     motd is now only fopen'd once since it gets used all the time.
  361.  
  362.     * ChangeLog, Makefile.am, Makefile.in, ban.c, configure, configure.in, kick.c, level.c, login.c, napster.txt, opennap.h, sample.conf:
  363.     fixed core in level().  user might be NULL so don't operate on it.
  364.  
  365.     * config.c:
  366.     changed nick_expire to 31 days by default
  367.  
  368.     * announce.c, buffer.c, handler.c, search.c:
  369.     removed several unnecessary log entries
  370.  
  371.     error message from read() and write() should include the host for which the
  372.     error occured for better debugging
  373.  
  374. 2000-06-02  drscholl  <drscholl@users.sourceforge.net>
  375.  
  376.     * README, change.c, join.c, level.c, login.c, muzzle.c, opennap.h, synch.c, userdb.c:
  377.     added timestamps to the channel modes on synch
  378.  
  379.     changed the .created member of USERDB to be .timestamp.  This field is now
  380.     used to keep track of when the entry was last modified so it can be used to
  381.     synch servers better.
  382.  
  383.     fixed synch of cloak status.  added ability to absolutely turn cloak on in a
  384.     server->server message
  385.  
  386.     rewrote level() to be much cleaner
  387.  
  388.     muzzle status was not correctly restored from the users file upon startup
  389.  
  390.     new function create_db() created a USERDB struct based on a USER struct to
  391.     avoid duplicate code in level() and muzzle()
  392.  
  393.     * channel.c, handler.c, join.c, level.c, opennap.h, privmsg.c, synch.c, README:
  394.     added timestamp to channels so that servers can sync the level and limit
  395.     properly
  396.  
  397.     added drop channel (10207) command to turn a persistent channel into a
  398.     normal channel
  399.  
  400. 2000-06-02  drscholl  <drscholl@users.sourceforge.net>
  401.  
  402.     * TODO, add_file.c:
  403.     prevent refcount overflow by discarding tokens in excess of 30
  404.  
  405. 2000-06-01  drscholl  <drscholl@users.sourceforge.net>
  406.  
  407.     * hotlist.c:
  408.     only send the notice about the hotlist limit once to avoid flooding the
  409.     client
  410.  
  411.     * main.c:
  412.     added dump_state() to dump all state info (users/channels/bans) to disk
  413.     on a periodic basis.
  414.  
  415.     * add_file.c:
  416.     freqToMask() and bitrateToMask() now display the user and client info in
  417.     their error messages for debugging
  418.  
  419.     * change.c, configure, configure.in, handler.c, level.c, login.c, muzzle.c, opennap.h, userdb.c, whois.c:
  420.     support for keeping client email address is now turned off by default.
  421.     added --enable-email configure option to turn it back on
  422.  
  423.     * add_file.c, config.c, main.c, opennap.h:
  424.     added max_path variable to limit the length of a filename to the add_file()
  425.     command (default: 256)
  426.  
  427.     * add_file.c:
  428.     add-directory() should process the rest of the line when it detects a
  429.     duplicate rather than aborting
  430.  
  431.     * add_file.c, browse.c:
  432.     the browse result didnt use BitRate and SampleRate to get the real values
  433.  
  434.     * add_file.c, browse.c, opennap.h, search.c:
  435.     compacted the DATUM struct since the bitrate and samplerate can only have a
  436.     few defined values
  437.  
  438.     ->hash member of DATUM should not be present when resume is disabled.
  439.  
  440.     * login.c, opennap.h:
  441.     dont need the ->hash member of DATUM struct when compiling without resume
  442.     support
  443.  
  444.     changed kill message for ghosts in login()  to include the name of the
  445.     server where the ghost is connected
  446.  
  447.     * login.c: ghost code was still buggy
  448.  
  449.     * login.c:
  450.     fixed broken ghost code which caused a server core
  451.  
  452.     * synch.c:
  453.     syncing the chanops didnt including the :sender parameter
  454.  
  455.     * channel.c, login.c, remove_connection.c:
  456.     fixed login() to allow the ghost detection to proceed with the login without
  457.     killing both connections
  458.  
  459. 2000-05-31  drscholl  <drscholl@users.sourceforge.net>
  460.  
  461.     * ChangeLog, NEWS, README:
  462.     updated files for 0.30 release
  463.  
  464.     * announce.c, login.c:
  465.     announce() should use Operator as the nick when the user is cloaked
  466.  
  467.     invalid_nick() should not allow `operator'
  468.  
  469.     * login.c:
  470.     forgot to issue a KILL when terminating a ghost
  471.  
  472.     * login.c, napster.txt:
  473.     server will now terminate old connections if a client logs in from the same
  474.     ip for the same nick.  this allows clients to kill their own ghosts.
  475.  
  476.     * ban.c, browse.c, change.c, channel.c, hotlist.c, join.c, level.c, login.c, opennap.h, privmsg.c, sample.conf, serverlib.c:
  477.     added generic invalid_nick_msg() function
  478.  
  479.     * ban.c, change.c, config.c, kick.c, kill_user.c, main.c, muzzle.c, opennap.h, serverlib.c:
  480.     added max_reason configuration variable to limit the size of the reason
  481.     strings in the muzzle/kick/kill messages
  482.  
  483.     * FAQ, config.c, list_users.c, part.c, public.c:
  484.     re-added the form_message() calls for public() and emote()
  485.  
  486.     * config.c, configure, configure.in, login.c, main.c, napster.txt, opennap.h, sample.conf, topic.c:
  487.     added max_client_string config variable to limit the length of the client
  488.     version string in the login command
  489.  
  490.     strlen() returns ssize_t so have to cast the Max_* to unsigned to avoid
  491.     compiler warnings
  492.  
  493.     * Makefile.in, ban.c, config.c, download.c, hotlist.c, main.c, muzzle.c, opennap.h, privmsg.c, sample.conf, topic.c:
  494.     added max_ignore config var to limit user lists
  495.  
  496.     added max_hotlist config var to limit user lists
  497.  
  498.     added max_topic config var to limit channel topics
  499.  
  500.     more fixes to detect invalid nicknames before they are used
  501.  
  502. 2000-05-31  drscholl  <drscholl@users.sourceforge.net>
  503.  
  504.     * announce.c, login.c:
  505.     announce() should use Operator as the nick when the user is cloaked
  506.  
  507.     invalid_nick() should not allow `operator'
  508.  
  509.     * login.c:
  510.     forgot to issue a KILL when terminating a ghost
  511.  
  512.     * login.c, napster.txt:
  513.     server will now terminate old connections if a client logs in from the same
  514.     ip for the same nick.  this allows clients to kill their own ghosts.
  515.  
  516.     * ban.c, browse.c, change.c, channel.c, hotlist.c, join.c, level.c, login.c, opennap.h, privmsg.c, sample.conf, serverlib.c:
  517.     added generic invalid_nick_msg() function
  518.  
  519.     * ban.c, change.c, config.c, kick.c, kill_user.c, main.c, muzzle.c, opennap.h, serverlib.c:
  520.     added max_reason configuration variable to limit the size of the reason
  521.     strings in the muzzle/kick/kill messages
  522.  
  523.     * FAQ, config.c, list_users.c, part.c, public.c:
  524.     re-added the form_message() calls for public() and emote()
  525.  
  526.     * config.c, configure, configure.in, login.c, main.c, napster.txt, opennap.h, sample.conf, topic.c:
  527.     added max_client_string config variable to limit the length of the client
  528.     version string in the login command
  529.  
  530.     strlen() returns ssize_t so have to cast the Max_* to unsigned to avoid
  531.     compiler warnings
  532.  
  533.     * Makefile.in, ban.c, config.c, download.c, hotlist.c, main.c, muzzle.c, opennap.h, privmsg.c, sample.conf, topic.c:
  534.     added max_ignore config var to limit user lists
  535.  
  536.     added max_hotlist config var to limit user lists
  537.  
  538.     added max_topic config var to limit channel topics
  539.  
  540.     more fixes to detect invalid nicknames before they are used
  541.  
  542. 2000-05-31  drscholl  <drscholl@users.sourceforge.net>
  543.  
  544.     * Makefile.in, buffer.c:
  545.     fixed buffer overflow when output to the client is larger than 1024 bytes in
  546.     one command
  547.  
  548.     * ChangeLog, NEWS, main.c:
  549.     updated ChangeLog and NEWS for 0.28 release
  550.  
  551.     schedule dump_channels() to happen at the user_db_interval
  552.  
  553. 2000-05-30  drscholl  <drscholl@users.sourceforge.net>
  554.  
  555.     * opennap.dsp, opennap.h, opennap.opt, remove_connection.c, sample.channels, server_login.c, topic.c, Makefile.in, README, buffer.c, config.c, configure, configure.in, handler.c, main.c:
  556.     zlib is now a requirement to compile.  removed all HAVE_LIBZ conditional
  557.     code.
  558.  
  559.     fixed bug in topic() which caused a buffer overrun in the new code to change
  560.     \r and \n to space
  561.  
  562.     * topic.c:
  563.     convert \r and \n in channel topics to space chars to avoid problems when
  564.     writing out the channels file
  565.  
  566. 2000-05-30  drscholl  <drscholl@users.sourceforge.net>
  567.  
  568.     * opennap.dsp, opennap.h, opennap.opt, remove_connection.c, sample.channels, server_login.c, topic.c, Makefile.in, README, buffer.c, config.c, configure, configure.in, handler.c, main.c:
  569.     zlib is now a requirement to compile.  removed all HAVE_LIBZ conditional
  570.     code.
  571.  
  572.     fixed bug in topic() which caused a buffer overrun in the new code to change
  573.     \r and \n to space
  574.  
  575.     * topic.c:
  576.     convert \r and \n in channel topics to space chars to avoid problems when
  577.     writing out the channels file
  578.  
  579. 2000-05-28  drscholl  <drscholl@users.sourceforge.net>
  580.  
  581.     * TODO, add_file.c, download.c, upload_complete.c:
  582.     if resume support is disabled, dont store the md5 hash value and just return
  583.     a bogus zero value wherever it is called for
  584.  
  585. 2000-05-27  drscholl  <drscholl@users.sourceforge.net>
  586.  
  587.     * Makefile.in, channel.c, main.c, opennap.h, part_channel.c, privmsg.c, synch.c:
  588.     added missing headers for clean compile with debug turned off
  589.  
  590.     channel ops can now be specified in the `channels' file.
  591.  
  592.     the channels file is now written out when opennap exits
  593.  
  594.     * ban.c, network.c:
  595.     use nlogerr() in bind_interface()
  596.  
  597.     * server_connect.c:
  598.     complete_connect() should abort if con->destroy is already set because the
  599.     error will have been cleared and check_status() will report no error
  600.  
  601. 2000-05-26  drscholl  <drscholl@users.sourceforge.net>
  602.  
  603.     * network.c:
  604.     use inet_addr() to detect dot-quad format hostnames since gethostbyname() is
  605.     unreliable under win95
  606.  
  607.     * README, channel.c, configure, configure.in, handler.c, join.c, kick.c, list_users.c, login.c, main.c, napster.txt, opennap.h, part_channel.c, privmsg.c, public.c, serverlib.c, synch.c, topic.c:
  608.     added support for channel operators
  609.  
  610. 2000-05-25  drscholl  <drscholl@users.sourceforge.net>
  611.  
  612.     * buffer.c:
  613.     fixed crash when opennap is compiled with zlib and linking to a server with
  614.     compression turned off
  615.  
  616.     * ChangeLog, NEWS, ban.c:
  617.     fixed spelling error of Connection in ban.c
  618.  
  619.     updated ChangeLog
  620.  
  621.     * config.c, privmsg.c:
  622.     fixes to compile cleanly with debugging off
  623.  
  624. 2000-05-25  drscholl  <drscholl@users.sourceforge.net>
  625.  
  626.     * config.c, privmsg.c:
  627.     fixes to compile cleanly with debugging off
  628.  
  629. 2000-05-24  drscholl  <drscholl@users.sourceforge.net>
  630.  
  631.     * napster.txt:
  632.     updated spec wrt to the login messages
  633.  
  634.     * README, TODO, handler.c, opennap.h, usermode.c:
  635.     changed user_mode() to user_mode_cmd() to avoid conflict with the
  636.     user_mode macro defined in <asm/ptrace.h> under Linux.  This was causing
  637.     problems under LinuxPPC.
  638.  
  639.     * list_users.c:
  640.     allow * to be specified for the server in global_user_list() to match users
  641.     on all servers (for use with the optional flags)
  642.  
  643.     * Makefile.am, Makefile.in, buffer.c, config.c, handler.c, init.c, list_users.c, main.c, network.c, opennap.h, remove_connection.c, server_login.c:
  644.     added `l' flag to global_user_list() to match leeches
  645.  
  646.     rewrote global_user_list_cb() because it did not work for multiple flags
  647.  
  648.     fixed connect() failure under win32 (linking now works!)
  649.  
  650.     fixed to bypass calls to zlib when the compression level is 0 since the
  651.     windows version is not complied with zlib at all.
  652.  
  653.     * Makefile.am, Makefile.in:
  654.     fixed makefile.am to add logchk and remove README.WIN32 and README.UNIX
  655.  
  656.     * logchk: added logchk script
  657.  
  658.     * README.WIN32, TODO:
  659.     removed README.WIN32
  660.  
  661.     MISSING LOG ENTRIES:
  662.  
  663.     fixed bug in public() where the server should not use `tag' to send the
  664.     message to the cl ients since the server uses 403 instead of 402
  665.  
  666.     added napchk script from wolf
  667.  
  668.     added -b command line option to run opennap in the background.
  669.     $config_dir/log is opened as stdout to catch output from the process.
  670.  
  671.     the pid is now stored in $config_dir/pid when opennap starts up to
  672.     facilitate external scripts to restart it when it dies
  673.  
  674.     configure now checks for mlockall()
  675.  
  676.     split Win32 and Unix installation notes into separate files for clarity
  677.  
  678.     updated TODO file
  679.  
  680.     the global MD5 hash table should not be compiled in when RESUME is
  681.     undefined, and the garbage collection should not be scheduled (was causing a
  682.     crash in the win32 build)
  683.  
  684.     ignore search matches when both parties are firewalled
  685.  
  686.     added README.WIN32 and README.UNIX to EXTRA_DIST
  687.  
  688.     check for valid (>0) file size when adding files
  689.  
  690.     privileged users should see who send publics and emotes even when other
  691.     users are cloaked.
  692.  
  693.     Current_Time needs to be set in mkpass.c prior to calling init_random()
  694.  
  695.     corrected mispelling of 'Foreward' in napster.txt
  696.  
  697.     * join.c, login.c:
  698.     added $ to the list of characters not allowed in nick or channel names.
  699.     many clients use this character to denote a variable
  700.  
  701.     * README.WIN32, init.c:
  702.     need <limits.h> for _POSIX_PATH_MAX
  703.  
  704.     * README, README.UNIX, README.WIN32:
  705.     rewrote installation instructions to reflect the new setup utility
  706.  
  707.     * Makefile.am, Makefile.in, opennap.dsw, opennap.opt, setup.c, setup.dsp:
  708.     added setup utility
  709.  
  710. 2000-05-23  drscholl  <drscholl@users.sourceforge.net>
  711.  
  712.     * Makefile.in, NEWS, public.c:
  713.     fixed bug in public() where the server should not use `tag' to send the
  714.     message to the cl ients since the server uses 403 instead of 402
  715.  
  716.     MISSING LOG ENTRIES:
  717.  
  718.     added napchk script from wolf
  719.  
  720.     added -b command line option to run opennap in the background.
  721.     $config_dir/log is opened as stdout to catch output from the process.
  722.  
  723.     the pid is now stored in $config_dir/pid when opennap starts up to
  724.     facilitate external scripts to restart it when it dies
  725.  
  726.     configure now checks for mlockall()
  727.  
  728.     split Win32 and Unix installation notes into separate files for clarity
  729.  
  730.     updated TODO file
  731.  
  732.     the global MD5 hash table should not be compiled in when RESUME is
  733.     undefined, and the garbage collection should not be scheduled (was causing a
  734.     crash in the win32 build)
  735.  
  736.     ignore search matches when both parties are firewalled
  737.  
  738.     added README.WIN32 and README.UNIX to EXTRA_DIST
  739.  
  740.     check for valid (>0) file size when adding files
  741.  
  742.     privileged users should see who send publics and emotes even when other
  743.     users are cloaked.
  744.  
  745.     Current_Time needs to be set in mkpass.c prior to calling init_random()
  746.  
  747.     corrected mispelling of 'Foreward' in napster.txt
  748.  
  749.     * Makefile.am, napchk:
  750.     added napchk script from wolf
  751.  
  752.     MISSING LOG ENTRIES:
  753.  
  754.     added -b command line option to run opennap in the background.
  755.     $config_dir/log is opened as stdout to catch output from the process.
  756.  
  757.     the pid is now stored in $config_dir/pid when opennap starts up to
  758.     facilitate external scripts to restart it when it dies
  759.  
  760.     configure now checks for mlockall()
  761.  
  762.     split Win32 and Unix installation notes into separate files for clarity
  763.  
  764.     updated TODO file
  765.  
  766.     the global MD5 hash table should not be compiled in when RESUME is
  767.     undefined, and the garbage collection should not be scheduled (was causing a
  768.     crash in the win32 build)
  769.  
  770.     ignore search matches when both parties are firewalled
  771.  
  772.     added README.WIN32 and README.UNIX to EXTRA_DIST
  773.  
  774.     check for valid (>0) file size when adding files
  775.  
  776.     privileged users should see who send publics and emotes even when other
  777.     users are cloaked.
  778.  
  779.     Current_Time needs to be set in mkpass.c prior to calling init_random()
  780.  
  781.     corrected mispelling of 'Foreward' in napster.txt
  782.  
  783.     * login.c:
  784.     fixed bug in login.c where it should have tested for
  785.     MSG_CLIENT_LOGIN_REGISTER instead of MSG_CLIENT_REGISTER.  this was causing
  786.     automatic registration of all users who weren't already registered.
  787.  
  788.     * Makefile.am, Makefile.in:
  789.     added README.WIN32 and README.UNIX to EXTRA_DIST
  790.  
  791.     * Makefile.in, list_users.c, opennap.h, whois.c:
  792.     added support for the global user list (831) command
  793.  
  794. 2000-05-22  drscholl  <drscholl@users.sourceforge.net>
  795.  
  796.     * sample.conf:
  797.     updated sample configuration file with new `server_ports' variable
  798.  
  799.     * config.c, configure, configure.in, main.c, network.c, opennap.h, resume.c:
  800.     support for resume is now turned off by default, use configure
  801.     --enable-resume to turn it back on
  802.  
  803.     added support for a list type configuration variable
  804.  
  805.     boolean config vars could not be set by default or reset via the client
  806.  
  807.     removed server_port configuration variable
  808.  
  809.     created new list configuration variable `server_ports' which contains a
  810.     space separated list of ports to listen on for incoming connections
  811.  
  812.     * server_connect.c, serverlib.c:
  813.     need to check for null return from next_arg() in kill_server() to prevent
  814.     segfault
  815.  
  816.     * add_file.c:
  817.     check for valid (>0) file size when adding files
  818.  
  819.     * public.c:
  820.     privileged users should see who send publics and emotes even when other
  821.     users are cloaked.
  822.  
  823. 2000-05-21  drscholl  <drscholl@users.sourceforge.net>
  824.  
  825.     * public.c:
  826.     fixed problem with emote() not working over server links
  827.  
  828.     * init.c, main.c:
  829.     fixes to compile under os/2
  830.  
  831.     * README, README.UNIX, README.WIN32:
  832.     split Win32 and Unix installation notes into separate files for clarity
  833.  
  834.     * README, mkpass.c, napster.txt:
  835.     Current_Time needs to be set in mkpass.c prior to calling init_random()
  836.  
  837.     corrected mispelling of 'Foreward' in napster.txt
  838.  
  839. 2000-05-19  drscholl  <drscholl@users.sourceforge.net>
  840.  
  841.     * TODO, util.c:
  842.     print_args() should not print to stderr so that when in background mode it
  843.     will get saved in the log file
  844.  
  845.     * Makefile.in, config.c, configure, configure.in, init.c, main.c, opennap.h, util.c:
  846.     added -b command line option to run opennap in the background.
  847.     $config_dir/log is opened as stdout to catch output from the process.
  848.  
  849.     the pid is now stored in $config_dir/pid when opennap starts up to
  850.     facilitate external scripts to restart it when it dies
  851.  
  852.     configure now checks for mlockall()
  853.  
  854. 2000-05-18  drscholl  <drscholl@users.sourceforge.net>
  855.  
  856.     * TODO, main.c:
  857.     updated TODO file
  858.  
  859.     the global MD5 hash table should not be compiled in when RESUME is
  860.     undefined, and the garbage collection should not be scheduled (was causing a
  861.     crash in the win32 build)
  862.  
  863.     * search.c:
  864.     ignore search matches when both parties are firewalled
  865.  
  866. 2000-05-15  drscholl  <drscholl@users.sourceforge.net>
  867.  
  868.     * ChangeLog, NEWS, README, login.c, opennap.dsp, opennap.h, opennap.opt:
  869.     updated build for Win32 platforms
  870.  
  871.     * Makefile.in, kick.c:
  872.     the reason in clear_channel() is not quoted from the client, so use
  873.     next_arg() instead of split_line() to parse the input
  874.  
  875. 2000-05-13  drscholl  <drscholl@users.sourceforge.net>
  876.  
  877.     * configure.in, init.c, join.c, login.c, main.c, opennap.h, resume.c, sample.conf, Makefile.in, README, add_file.c, config.c, configure:
  878.     added --disable-resume to turn off server support for resume searching
  879.  
  880.     added `lock_memory' configuration variable to prevent the process from being
  881.     swapped
  882.  
  883.     added `registered_only' configuration variable to only allow registered
  884.     users to log in
  885.  
  886.     added `auto_register' configuration variable to automatically register users
  887.     upon login
  888.  
  889. 2000-05-09  drscholl  <drscholl@users.sourceforge.net>
  890.  
  891.     * add_file.c, config.c, handler.c, opennap.h, privmsg.c, util.c:
  892.     added command 870 for new share file supported in beta6
  893.  
  894.     next_arg() now handles quoted parameters
  895.  
  896.     * server_login.c:
  897.     get_server_pass() should return `server_password' if no local password is
  898.     specified
  899.  
  900.     * ChangeLog:
  901.     updated the ChangeLog file with recent modifications.
  902.  
  903.     failed log message from the previous commit:
  904.  
  905.     modified get_server_pass() to optionally return the local password to use
  906.     (if specified in the config file) to avoid parsing the file twice.
  907.  
  908.     * server_login.c:
  909.     modified get_server_pass() to optionally return the local password to use
  910.     (if specified in the config file) to avoid parsing the file twice.
  911.  
  912.     * Makefile.am, Makefile.in, README, server_login.c, textdb.c, textdb.h:
  913.     rewrote get_server_pass() to use its own simple parsing routine to fetch the
  914.     password instead of using the textdb_*() functions.
  915.  
  916.     added support for using different server passwords with each linked server
  917.     rather than always using the value of `server_password'.  if a local
  918.     password is specified in the `servers' it will override the default
  919.     password.
  920.  
  921.     * napster.txt, opennap.h, privmsg.c:
  922.     added missing 325 server response when the user to ignore is already ignored
  923.  
  924. 2000-05-08  drscholl  <drscholl@users.sourceforge.net>
  925.  
  926.     * handler.c, kick.c, napster.txt, network.c, opennap.h, privmsg.c, server_links.c:
  927.     added entries for the server-side ignore list to the handler array.
  928.  
  929.     update napster.txt with the numerics for server-side ignore
  930.  
  931.     kick() should call notify_mods() prior to part_channel() in case the channel
  932.     is destroyed by kicking the last user out (Greg Prosser
  933.     <greg@snickers.org>).
  934.  
  935.     set_limit() should just warn if FD_SETSIZE is smaller than the set hard
  936.     limit for max file descriptors.
  937.  
  938. 2000-05-03  drscholl  <drscholl@users.sourceforge.net>
  939.  
  940.     * TODO, change.c, download.c, hotlist.c, join.c, opennap.h, part.c, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, serverlib.c, usermode.c, util.c:
  941.     added server-side ignore/unignore functionality.  this is not able to be
  942.     called by the user yet since the numerics are unknown
  943.  
  944.     changed join/part to show the joins/parts to privileged users regardless of
  945.     the cloak status
  946.  
  947.     added CLOAK usermode to en/disable the server notifications
  948.  
  949.     * handler.c, init.c, join.c, login.c, main.c, napster.txt, opennap.h, part.c, public.c, util.c:
  950.     increased hash table size to 521 for users and hotlist for better
  951.     performance with many users
  952.  
  953.     public() and emote() now find the channel by looking through the users
  954.     joined channel list with find_channel() instead of calling hash_lookup()
  955.  
  956.     removed many extraneous log() messages about command parsing errors
  957.  
  958.     switched to using ISUSER(user->con) instead of testing user->local
  959.  
  960.     * hash.c, sample.conf:
  961.     replace hash function with the `ElfHash' used in the ELF loader since it
  962.     produces MANY less collisions
  963.  
  964. 2000-04-30  drscholl  <drscholl@users.sourceforge.net>
  965.  
  966.     * README, handler.c, opennap.h, server_links.c:
  967.     changed numeric for server ping to 750 to match the official servers
  968.  
  969.     * change.c, level.c:
  970.     setlinespeed didn't actually change the user's speed in the USER struct
  971.  
  972.     * login.c: exempt mods+ from server bans
  973.  
  974.     * Makefile.am, Makefile.in, TODO, change.c, handler.c, muzzle.c, napster.txt, opennap.h, unmuzzle.c:
  975.     consolodated the muzzle/unmuzzle code into one function
  976.  
  977.     extended muzzle/unmuzzle to allow change for a registered user that is not
  978.     currently logged in
  979.  
  980. 2000-04-28  drscholl  <drscholl@users.sourceforge.net>
  981.  
  982.     * ChangeLog:
  983.     updated ChangeLog with recent activity
  984.  
  985.     missing log entries from last commit:
  986.  
  987.     * change.c, join.c, public.c, whois.c:
  988.     publics and emotes should not be cloaked when the channel level is mod+
  989.  
  990.     whois should show Cloaked state for privileged users
  991.  
  992.     whois should hide channel membership for nonprivileged users when they
  993.     perform a whois on a cloaked user
  994.  
  995.     added a period at the end of the notification of cloak status.
  996.  
  997.     * change.c, level.c, login.c, muzzle.c, opennap.h, unmuzzle.c, userdb.c:
  998.     changed muzzle field in USERDB to flags and use the ON_* bitmasks instead
  999.     of individual fields.
  1000.  
  1001.     cloak state is now saved in the userdb and restored when the user logs back
  1002.     in.
  1003.  
  1004.     * README, handler.c, opennap.h, server_links.c:
  1005.     added ping_server() command (10116)
  1006.  
  1007. 2000-04-27  drscholl  <drscholl@users.sourceforge.net>
  1008.  
  1009.     * README, privmsg.c:
  1010.     added cloak to the list of operserv commands
  1011.  
  1012.     * Makefile.in, change.c, kick.c, kill_user.c, list_users.c, muzzle.c, opennap.h, serverlib.c, unmuzzle.c:
  1013.     kill, muzzle, unmuzzle and kick should not display the issuer's nick if they
  1014.     are cloaked
  1015.  
  1016.     cloak() should call notify_mods()
  1017.  
  1018.     * README, TODO, browse.c, change.c, channel.c, handler.c, join.c, muzzle.c, napster.txt, opennap.h, part_channel.c, patchnap.c, privmsg.c, public.c, whois.c:
  1019.     updated napster.txt with new findings from the linux nap v1.0 beta
  1020.  
  1021.     changed numeric for the kick command to 829, per nap v1.0 beta
  1022.  
  1023.     changed numerics for channel ban, unban and list per nap v1.0 beta
  1024.  
  1025.     renamed chanban, chanunban, chanbanlist operserv commands to cban, cunban
  1026.     and cbanlist.
  1027.  
  1028.     added cbanclear to operserv commands
  1029.  
  1030.     added the clear channel ban list command (424)
  1031.  
  1032.     added the cloak user command (625).  for cloaked users, parts/joins are not
  1033.     sent and public messages show up as being from `Operator' instead of the
  1034.     real nick that sent it.
  1035.  
  1036.     added stub routine for global user list.
  1037.  
  1038.     updated patchnap.c for linux nap v1.0 beta
  1039.  
  1040.     * FAQ, README, privmsg.c:
  1041.     added chanban and chanunban commands to operserv
  1042.  
  1043.     added FAQ about max_browse_result/client_queue_length
  1044.  
  1045.     * Makefile.in, channel.c:
  1046.     fixed channel ban notify_mods() messages which were missing channel names
  1047.  
  1048.     * README, ban.c, channel.c, configure, configure.in, handler.c, join.c, opennap.h, serverlib.c, util.c:
  1049.     added first cut at channel bans
  1050.  
  1051. 2000-04-26  drscholl  <drscholl@users.sourceforge.net>
  1052.  
  1053.     * Makefile.in, login.c, muzzle.c:
  1054.     changed notification messages in login() wrt restoring muzzled state to
  1055.     match those in the muzzle() command.
  1056.  
  1057.     fixed muzzle() to allow for automatic server muzzling by avoiding a call to
  1058.     pop_user(), which assumes a real user issued the command
  1059.  
  1060.     * napster.txt:
  1061.     updated protocol spec with additional info from Thomas van der Heijden
  1062.     <thom@bart.nl>
  1063.  
  1064.     * whois.c:
  1065.     consolodated the whois response formation instead of separate commands for
  1066.     each case.  now normal users can see whether another user is muzzled
  1067.  
  1068.     * login.c, muzzle.c, opennap.h, unmuzzle.c, userdb.c:
  1069.     muzzle status is now saved in the user db so that it gets restored when the
  1070.     user logs in again
  1071.  
  1072.     * mkpass.c, opennap.h, usermode.c, util.c, Makefile.in, announce.c, configure, configure.in, handler.c, init.c, main.c:
  1073.     added WALLOP user mode to disable wallops
  1074.  
  1075.     use srand() and rand() to generate random numbers instead of hashing input
  1076.     data with md5.  the md5 code seems to generate lots of unaligned memory
  1077.     accesses on alpha, and it really isnt critical to have cryptographic quality
  1078.     random numbers.  it should also reduce the cpu usage since it no longer has
  1079.     to hash all input.
  1080.  
  1081.     * join.c:
  1082.     added support for automatic creation of rollover channels for predefined
  1083.     channels
  1084.  
  1085.     * login.c:
  1086.     check for get_level() == -1 in reginfo()
  1087.  
  1088. 2000-04-25  drscholl  <drscholl@users.sourceforge.net>
  1089.  
  1090.     * main.c, opennap.h:
  1091.     Num_Gigs should be unsigned int to prevent a negative count when going about
  1092.     2TB library size.
  1093.  
  1094. 2000-04-24  drscholl  <drscholl@users.sourceforge.net>
  1095.  
  1096.     * TODO, userdb.c:
  1097.     check for valid level when reading the userdb from disk
  1098.  
  1099. 2000-04-20  drscholl  <drscholl@users.sourceforge.net>
  1100.  
  1101.     * ban.c, synch.c:
  1102.     fixed loading and saving of bans to get the correct ban type
  1103.  
  1104. 2000-04-19  drscholl  <drscholl@users.sourceforge.net>
  1105.  
  1106.     * Makefile.in, opennap.dsp, opennap.opt:
  1107.     updated win32 projects files for 0.25
  1108.  
  1109. 2000-04-18  drscholl  <drscholl@users.sourceforge.net>
  1110.  
  1111.     * ChangeLog, Makefile.am:
  1112.     post 0.25 release commit
  1113.  
  1114.     forgot to add sample.channels to EXTRA_DIST in Makefile.am
  1115.  
  1116.     * NEWS, README, TODO, configure, sample.conf:
  1117.     final changes for 0.25 release
  1118.  
  1119.     * ChangeLog, channel.c, configure.in, login.c, opennap.h, sample.channels, search.c:
  1120.     added "live" to the list of words to ignore in searches
  1121.  
  1122.     restored full ChangeLog
  1123.  
  1124.     updated version to 0.25
  1125.  
  1126.     allow the channels file to contain blank lines
  1127.  
  1128. 2000-04-17  drscholl  <drscholl@users.sourceforge.net>
  1129.  
  1130.     * README, ban.c, sample.conf:
  1131.     fixed ban() not to check for permission from commands received from other
  1132.     servers so that syncing will work properly
  1133.  
  1134.     removed old entries from sample.conf
  1135.  
  1136.     * muzzle.c, napster.txt, sample.channels, search.c, server_login.c, unmuzzle.c:
  1137.     muzzle() should error if user is already muzzled
  1138.  
  1139.     unmuzzle() should error if user is not muzzled
  1140.  
  1141.     updated napster.txt to reflect the new use of 401 (part)
  1142.  
  1143.     added "f" to the list of words to ignore in searches
  1144.  
  1145.     avoid infinite loop in mark_links() by checking for a link already marked
  1146.     before recursing on it
  1147.  
  1148.     added sample.channels file
  1149.  
  1150. 2000-04-15  drscholl  <drscholl@users.sourceforge.net>
  1151.  
  1152.     * Makefile.am, Makefile.in, ban.c, channel.c, config.c, init.c, main.c, motd.c, opennap.h, part_channel.c, sample.conf, server_login.c, userdb.c:
  1153.     added `channels' config file to predefine persistent channels
  1154.  
  1155.     removed user_db_path, server_db_path and motd_path config variables.
  1156.  
  1157.     added config_dir variable to control where opennap should look for the
  1158.     users, servers, motd, bans and channels files
  1159.  
  1160.     * Makefile.in, login.c:
  1161.     fixed bug in bad password error message which caused a crash
  1162.  
  1163. 2000-04-14  drscholl  <drscholl@users.sourceforge.net>
  1164.  
  1165.     * Makefile.am:
  1166.     added usermode.c to compile list
  1167.  
  1168.     * ChangeLog:
  1169.     updated ChangeLog with recent entries
  1170.  
  1171.     * level.c:
  1172.     allow users to demote their user level again
  1173.  
  1174.     * level.c:
  1175.     fixed bug in new level() code where an elite could not set another elite to
  1176.     a lower level
  1177.  
  1178.     * search.c:
  1179.     added "downloads" to the list of words to ignore on searches
  1180.  
  1181. 2000-04-13  drscholl  <drscholl@users.sourceforge.net>
  1182.  
  1183.     * README, announce.c, ban.c, handler.c, login.c, opennap.h, util.c:
  1184.     added remote_notify_mods() command to allow a server to broadcast a message
  1185.     to remote mods
  1186.  
  1187.     server will no longer delink when a bad command is received.
  1188.  
  1189.     user and host ban messages are now sent to all mods on all servers
  1190.  
  1191.     all mods+ are notified when a user fails to log in as a privileged user
  1192.  
  1193.     * join.c, level.c, login.c:
  1194.     don't allow % in either nicknames or channel names for safety
  1195.  
  1196.     fixed bug in format for log() message in channel_level() when a user tries
  1197.     to set a channel to a level above their own
  1198.  
  1199.     fixed bug in level() where the notification about the level change was sent
  1200.     to the user who issued the change instead of the target user
  1201.  
  1202.     * config.c, login.c, main.c, opennap.h, userdb.c:
  1203.     removed Check_Expire global variable
  1204.  
  1205.     added nick expiration to dump_userdb()
  1206.  
  1207.     * ban.c, level.c, main.c, search.c:
  1208.     allow the setuserlevel command to work when the user is registered but not
  1209.     logged in
  1210.  
  1211.     set SO_REUSEADDR on the stats port
  1212.  
  1213. 2000-04-12  drscholl  <drscholl@users.sourceforge.net>
  1214.  
  1215.     * search.c: added additional debugging checks
  1216.  
  1217.     * remove_connection.c, whois.c:
  1218.     hash_free() was not called to free a local user's list of files
  1219.  
  1220.     * kick.c, napster.txt:
  1221.     clear_channel() needs to be careful about walking the list of users in a
  1222.     channel since the call to part_channel() could free the current list pointer
  1223.  
  1224.     * config.c, handler.c, main.c, opennap.h, sample.conf, util.c:
  1225.     added max_command_length config var to control the max allowed length of a
  1226.     client command
  1227.  
  1228.     * ban.c, login.c, muzzle.c, unmuzzle.c, whois.c:
  1229.     unban had a bug where it would tell you the ban was not found even if it
  1230.     was.
  1231.  
  1232.     muzzle and unmuzzle should optionally take a reason argument.
  1233.  
  1234.     whois should display Muzzled instead of Active for muzzled users
  1235.  
  1236.     * config.c, remove_connection.c, sample.conf:
  1237.     no need to null out the uopt->files member in remove_connection()
  1238.  
  1239.     changed default value of collect_interval to 300
  1240.  
  1241.     added max_browse_result to sample.conf
  1242.  
  1243. 2000-04-11  drscholl  <drscholl@users.sourceforge.net>
  1244.  
  1245.     * change.c, login.c, search.c:
  1246.     the reason for a nuke is not required
  1247.  
  1248.     added 'home' to the list of words to ignore in searches
  1249.  
  1250.     * opennap.h, remove_file.c, serverlib.c, topic.c, upload_complete.c, userdb.c, usermode.c, whois.c, add_file.c, browse.c, change.c, download.c, free_user.c, level.c, login.c:
  1251.     moved the list of shared files into the USEROPT struct since it only needs
  1252.     to be present for locally connected users
  1253.  
  1254.     change_pass(), alter_pass() and nuke() should releay the command to other
  1255.     servers before checking if the account is locally registered, since the
  1256.     userdb may not be entirely replicated
  1257.  
  1258.     userdb_dump() sould unlink() User_Db_Path before calling rename() since it
  1259.     causes an error under win32
  1260.  
  1261.     notify_mods() is called with new usermode TOPIC when a topic of a channel
  1262.     has been changed
  1263.  
  1264.     compacted whois() to use the same snprintf() call for level>=moderator
  1265.  
  1266.     * change.c, level.c, login.c, serverlib.c, usermode.c:
  1267.     change_pass() and change_email() need to check for bad user input
  1268.  
  1269.     added include files to prevent compiler warnings
  1270.  
  1271.     * login.c:
  1272.     register_user() did not call generate_pass() to generate the md5 password
  1273.  
  1274.     * change.c:
  1275.     alter password command was sending the md5-hashed password instead of the
  1276.     raw password
  1277.  
  1278.     * usermode.c:
  1279.     usermode.c needs stdio.h for snprintf()
  1280.  
  1281.     * handler.c, resume.c, search.c:
  1282.     removed extraneous log messages
  1283.  
  1284.     ignore the word "download" in searches
  1285.  
  1286. 2000-04-10  drscholl  <drscholl@users.sourceforge.net>
  1287.  
  1288.     * search.c:
  1289.     added "download" to the list of words to ignore when searching
  1290.  
  1291.     * search.c:
  1292.     added new words to ignore in the search table: scour, media, agent, on,
  1293.     stuff
  1294.  
  1295.     * usermode.c:
  1296.     adding missing PORT string in User_Modes
  1297.  
  1298.     initial mode should be set from current user mode in user_mode()
  1299.  
  1300.     * kick.c, usermode.c:
  1301.     fixed compilation warnings for usermode code
  1302.  
  1303.     * usermode.c:
  1304.     added new function handler user_mode()
  1305.  
  1306.     * Makefile.in, ban.c, change.c, download.c, handler.c, hotlist.c, join.c, kick.c, kill_user.c, level.c, login.c, muzzle.c, opennap.h, privmsg.c, remove_connection.c, server_connect.c, server_login.c, serverlib.c, unmuzzle.c:
  1307.     patch from colten edwards to allow ircd-like user levels to enable or
  1308.     disable many server messages to privileged users
  1309.  
  1310.     * ChangeLog, NEWS, sample.conf, sample.users:
  1311.     final updates for 0.24 release
  1312.  
  1313.     * README, add_file.c, search.c:
  1314.     ignore "2" in filenames since it is a frequent occurance
  1315.  
  1316.     * free_user.c:
  1317.     update the last seen time for registered nicks when a user logs off
  1318.  
  1319.     * login.c:
  1320.     server should send a KILL when it detects a remote user with an invalid
  1321.     nick
  1322.  
  1323.     * change.c, serverlib.c:
  1324.     change_email() did not prefix the server->server messgae with the nick of
  1325.     the user who issued the command
  1326.  
  1327.     nosuchchannel() and unparsable() now check for ISUSER() to avoid the need to
  1328.     check every time those functions need to be called
  1329.  
  1330.     * change.c:
  1331.     the server-server message for change_pass() did not contain the user who
  1332.     changed the password
  1333.  
  1334. 2000-04-09  drscholl  <drscholl@users.sourceforge.net>
  1335.  
  1336.     * handler.c, join.c, kick.c, opennap.h:
  1337.     added the clear channel (820) command
  1338.  
  1339. 2000-04-08  drscholl  <drscholl@users.sourceforge.net>
  1340.  
  1341.     * handler.c:
  1342.     handle_connection() should send the USER_SHARING message prior to execution
  1343.     of the callback so that the proper information is sent to users when the
  1344.     user joins a channel for the first time.
  1345.  
  1346.     * free_user.c, handler.c, init.c:
  1347.     Local_Files was not decremented in free_user()
  1348.  
  1349.     added sig handler to call md_cleanup() on SIGUSR1
  1350.  
  1351.     * main.c, server_connect.c:
  1352.     fixed core in update_stats() on new log message for number of local files
  1353.  
  1354.     login timer was not set on server connections
  1355.  
  1356.     * README, handler.c, privmsg.c:
  1357.     added the config and reconfig commands to OperServ
  1358.  
  1359.     updated comment above the share/unshare termination detection to indicate
  1360.     that if a user does not issue any more commands after sharing/unsharing,
  1361.     the information will not get passed to the peer servers
  1362.  
  1363.     * add_file.c, handler.c, opennap.h, remove_file.c:
  1364.     add_file()/remove_file() now set a flag in the USER struct.
  1365.     handle_connection() then checks for the end of the share/unshare messags
  1366.     from the client by checking for a command other than share/unshare and
  1367.     passes the final results to the peer servers
  1368.  
  1369. 2000-04-07  drscholl  <drscholl@users.sourceforge.net>
  1370.  
  1371.     * add_file.c, main.c, opennap.h, remove_file.c, resume.c:
  1372.     server now keeps track of how many files are available from local users
  1373.     and displays this info in update_stats()
  1374.  
  1375.     removed prototypes for outdated functions from opennap.h
  1376.  
  1377.     * add_file.c, join.c, kick.c, login.c, main.c, muzzle.c, napster.txt, opennap.h, remove_file.c, serverlib.c, synch.c:
  1378.     created new util functions nosuchchannel() and unparsable()
  1379.  
  1380.     the optional reason in the muzzle command should be quoted if present
  1381.  
  1382.     the optional reason in the kick command should be quoted if present
  1383.  
  1384.     channel_limit() now only checks for privilege for local users so that the
  1385.     limits can be synced by servers when linking
  1386.  
  1387.     * README, userdb.c, util.c:
  1388.     updated installation instructions
  1389.  
  1390.     userdb_init() should only rewind() if the first line doesn't contain the
  1391.     version information
  1392.  
  1393.     log() no longer prefixes messages with `opennap: '
  1394.  
  1395.     * Makefile.am, Makefile.in, buffer.c, handler.c, main.c, mkpass.c, mkpass.dsp, network.c, opennap.dsp, opennap.dsw, opennap.h, opennap.opt, opennap.plg, serverlib.c, snprintf.c, util.c:
  1396.     added mkpass project to win32 workspace
  1397.  
  1398.     created new macro N_ERRNO to be used in place of error when checking error
  1399.     conditions from socket related function calls.  win32 uses h_errno so this
  1400.     should be used as a wrapper to make the code cleaner
  1401.  
  1402.     added new macro nlogerr() which is like logerr() but should be used when
  1403.     priting errors from socket related functions
  1404.  
  1405.     * TODO, login.c:
  1406.     major cleanup of login().  password should not be checked until after the
  1407.     check for a user already logged in to prevent password guessing
  1408.  
  1409.     * Makefile.in, kick.c, main.c, search.c:
  1410.     missing channel name in the notify_mods() call in kick()
  1411.  
  1412.     ignore "rock" and "new" in search strings
  1413.  
  1414.     * NEWS, README, config.c, configure, configure.in, main.c, opennap.h, sample.conf, search.c:
  1415.     updated version number to 0.24
  1416.  
  1417.     added login timeout detection.  default is to close client connections if
  1418.     they have no logged in within 60 seconds
  1419.  
  1420.     added "me", "to" and "rock" to the list of words to ignore in the search
  1421.     table since over 5000 entries were detected
  1422.  
  1423. 2000-04-06  drscholl  <drscholl@users.sourceforge.net>
  1424.  
  1425.     * change.c, opennap.h:
  1426.     allow nuke_user() to take an optional reason for the revocation
  1427.  
  1428.     * login.c:
  1429.     delay setting the user's level from the db until after the notify_mods()
  1430.     call so that the user is not notified twice of their change in status.
  1431.  
  1432.     * Makefile.am, Makefile.in, config.c, handler.c, join.c, kick.c, list_channels.c, login.c, main.c, napster.txt, opennap.h, part.c, privmsg.c, sample.conf, server_usage.c:
  1433.     added kick.c for the kick() function
  1434.  
  1435.     added channel limit (826) command to specify the max users allowed in a
  1436.     channel.
  1437.  
  1438.     added full channnel list (827) command to show all channels with min level
  1439.     and user limit
  1440.  
  1441.     made the stats command accessable to normal users
  1442.  
  1443.     fixed find_handler() search that could end up in an infinite loop in certain
  1444.     cases.
  1445.  
  1446.     * TODO, login.c, napster.txt:
  1447.     updated TODO file
  1448.  
  1449.     fix for coredump when a nonregistered user attempts to log in
  1450.  
  1451.     updated napster.txt with new protocol findings
  1452.  
  1453. 2000-04-05  drscholl  <drscholl@users.sourceforge.net>
  1454.  
  1455.     * browse.c, main.c:
  1456.     data.max was not initialized to 0 in browse() causing a problem with
  1457.     browsing users on the same server
  1458.  
  1459.     * login.c, main.c:
  1460.     reorganized the login() routine to allows privileged users to bypass the
  1461.     max_connections restriction
  1462.  
  1463.     should check for -1 instead of EOF in getopt() test
  1464.  
  1465.     * add_file.c, search.c:
  1466.     modification to use the soundex hash as the key for the File_Table.  This
  1467.     should decrase the amount of memory required for searching at the expense of
  1468.     a little cpu, but should not affect the search results since it still uses
  1469.     the same token based scheme once the smallest bin has been found.
  1470.  
  1471. 2000-04-04  drscholl  <drscholl@users.sourceforge.net>
  1472.  
  1473.     * main.c:
  1474.     update_stats() now prints out the number of entries in the File_Table hash
  1475.     table to get an idea of its size
  1476.  
  1477.     * mkpass.c, search.c, serverlib.c:
  1478.     added copyright notice to mkpass.c and serverlib.c
  1479.  
  1480.     tokenize() should ignore the words "of", "you" and "mp3's" because of the
  1481.     high use of these words (>10,000 hits).
  1482.  
  1483. 2000-04-03  drscholl  <drscholl@users.sourceforge.net>
  1484.  
  1485.     * mkpass.c, serverlib.c:
  1486.     added new file mkpass.c to generate a md5 password
  1487.  
  1488.     added new file serverlib.c for functions that reference opennap globals
  1489.  
  1490.     * Makefile.am, Makefile.in, change.c, level.c, login.c, main.c, opennap.h, userdb.c, util.c:
  1491.     added support for md5 passwords for user db
  1492.  
  1493. 2000-03-31  drscholl  <drscholl@users.sourceforge.net>
  1494.  
  1495.     * ban.c:
  1496.     issue a kill if we receive a login command from a remote server for a
  1497.     locally banned user
  1498.  
  1499.     * ban.c:
  1500.     check_ban() should only set con->destroy for CLASS_UNKNOWN connections
  1501.  
  1502.     * server_connect.c:
  1503.     server_login() passsed the wrong field to the is_linked() function
  1504.  
  1505.     * README:
  1506.     updated README to discuss the new OperServ feature
  1507.  
  1508.     * login.c, privmsg.c:
  1509.     added pseudo user OperServ to allow privilegded users without builtin client
  1510.     support for the opennap specific commands to be able execute them by using
  1511.     /msg opserver ...
  1512.  
  1513.     * userdb.c:
  1514.     removed check for .nuked in dump_userdb()
  1515.  
  1516.     * change.c, handler.c, login.c:
  1517.     removed unnuke() command.  nuking the account removes it permanently.
  1518.  
  1519.     fixed encapsulated() to handle bad input data
  1520.  
  1521.     * change.c, handler.c, opennap.h, userdb.c:
  1522.     added support for nuking and restoring accounts
  1523.  
  1524.     * ban.c, init.c, main.c, opennap.h:
  1525.     added load/save bans feature from colten edwards.
  1526.  
  1527.     * opennap.h, server_connect.c, server_login.c:
  1528.     added is_linked() function to check to see if a server is already linked in
  1529.     order to avoid server loops
  1530.  
  1531.     * Makefile.in, ban.c, handler.c, login.c, main.c, opennap.h:
  1532.     removed check_accept() function.  the maximum connections is now enforced by
  1533.     login() to avoid the situation where servers can't link because the number
  1534.     of client connections has exceeded the maximum
  1535.  
  1536.     accept_connection() now calls check_ban() directly
  1537.  
  1538. 2000-03-30  drscholl  <drscholl@users.sourceforge.net>
  1539.  
  1540.     * handler.c, muzzle.c, network.c, privmsg.c, public.c, search.c, server_login.c, synch.c:
  1541.     the long line truncation in public/emote needs to calculate the length based
  1542.     upon the start of the data actually sent to the client.  server->server
  1543.     messages were being truncated in the _next_ packet.
  1544.  
  1545. 2000-03-28  drscholl  <drscholl@users.sourceforge.net>
  1546.  
  1547.     * ChangeLog, NEWS, README, opennap.h:
  1548.     win32 needs _POSIX_PATH_MAX defined to compile
  1549.  
  1550.     update ChangeLog, NEWS and README for 0.23 release
  1551.  
  1552.     * public.c:
  1553.     crop publics and emotes that are longer than 128 chars rather than rejecting
  1554.     them
  1555.  
  1556.     * public.c, spyserv.c:
  1557.     don't allow public or emote commands longer than 128 chars to prevent the
  1558.     DOS attack against the windows napster client.
  1559.  
  1560.     * main.c:
  1561.     listen fd needs to be set to nonblocking so the loop over accept() doesn't
  1562.     block the server.
  1563.  
  1564.     * ban.c, login.c, main.c:
  1565.     modified accept_connection() to loop until accept() returns an error
  1566.  
  1567.     cli->destroy should be set in check_accept when max connections has been
  1568.     reached.
  1569.  
  1570. 2000-03-27  drscholl  <drscholl@users.sourceforge.net>
  1571.  
  1572.     * TODO, change.c, join.c, util.c:
  1573.     only call notify_mods() if a users data port is set to a different value
  1574.     than what is currently set to
  1575.  
  1576.     join should send a 408 back to the user than joined, and not a 406.
  1577.  
  1578.     split_line() now breaks on space, tab, cr or lf to separate words
  1579.  
  1580.     * ban.c, change.c, config.c, init.c, level.c, login.c, main.c, opennap.h, userdb.c, whois.c:
  1581.     changed user db into an memory-based hash table to improve performance.
  1582.     the user db is dumped to disk every `user_db_interval' seconds (default:
  1583.     1800)
  1584.  
  1585.     * configure, configure.in, main.c, remove_connection.c:
  1586.     remove support for poll() since it doesnt work well
  1587.  
  1588. 2000-03-26  drscholl  <drscholl@users.sourceforge.net>
  1589.  
  1590.     * ban.c, main.c:
  1591.     fixed but in main loop with select()ing fds
  1592.  
  1593.     * util.c: more fixes
  1594.  
  1595.     * main.c, util.c:
  1596.     modified add_client() to find the first empty slot in the Clients[] array
  1597.  
  1598.     * main.c:
  1599.     should 0 out the old pointer when shifting down entries to fill holes
  1600.  
  1601.     * main.c, util.c:
  1602.     moved complete_connect() call to final loop to avoid altering Num_Clients in
  1603.     the read loop
  1604.  
  1605.     * main.c, util.c:
  1606.     poll() still returns EINVAL under linux so the main loop now always shifts
  1607.     down the CONNECTION pointeres to fill all holes.
  1608.  
  1609. 2000-03-25  drscholl  <drscholl@users.sourceforge.net>
  1610.  
  1611.     * ban.c, login.c, main.c, opennap.h:
  1612.     changed ban handling to use a LIST instead of an array
  1613.  
  1614.     * buffer.c, debug.h, join.c, util.c:
  1615.     added VALID_STR() debug macro for testing memory allocated by STRDUP()
  1616.  
  1617.     validate_user() and validate_channel() should call list_validate() instead
  1618.     of just checking the first entry in the list
  1619.  
  1620.     * opennap.dsp:
  1621.     committed .dsp file for win32 build
  1622.  
  1623.     * join.c:
  1624.     fixed error message for channel_level() to be more verbose to the client
  1625.  
  1626.     * level.c, login.c:
  1627.     fixed messages about changing a user's level to be consistent
  1628.  
  1629.     * kill_user.c, server_login.c:
  1630.     corrected log messages
  1631.  
  1632.     * login.c:
  1633.     reasons for a kill should be quoted in login()
  1634.  
  1635.     * handler.c, level.c, login.c, search.c, server_login.c, synch.c, topic.c:
  1636.     fixed sync_server() to send the locally connected server list first
  1637.  
  1638.     fixed topic() to return the current topic if none is specified
  1639.  
  1640.     fixed login() to notify_mods() when setting a user's level
  1641.  
  1642. 2000-03-24  drscholl  <drscholl@users.sourceforge.net>
  1643.  
  1644.     * opennap.h, remove_connection.c, server_login.c:
  1645.     need to recursively remove server link info behind servers that split
  1646.  
  1647.     * server_login.c, synch.c:
  1648.     fixed broken sync message for server links
  1649.  
  1650.     * kill_user.c, level.c:
  1651.     fixed bug in kill_user() where the size of the av[] was not correct in the
  1652.     call to split_line()
  1653.  
  1654.     * Makefile.am, Makefile.in, README, configure, configure.in, handler.c, network.c, opennap.h, opennap.opt, opennap.plg, server_links.c, server_login.c:
  1655.     fixed to compile under Windows NT 4.0
  1656.  
  1657.     * remove_connection.c, server_links.c, server_login.c, synch.c, README, handler.c, main.c, napster.txt, opennap.h:
  1658.     added support for passing of server link info so that all servers know about
  1659.     each other
  1660.  
  1661.     * TODO, kill_user.c:
  1662.     the reason for a kill should be quoted if it exists
  1663.  
  1664.     * handler.c, level.c, main.c:
  1665.     bail out without doing anything if the user level is set to the level that
  1666.     was requested
  1667.  
  1668.     * main.c:
  1669.     need to reset the CLient id when shifting down the entries to fill gaps
  1670.  
  1671.     * main.c:
  1672.     modified main() loop to reduce the size of the Clients array if there are
  1673.     more than 10 holes in it.  this is to try and prevent EINVAL under linux,
  1674.     which does a sanity check to make sure the nfds arg is smaller than the
  1675.     current number of open fds
  1676.  
  1677.     * main.c:
  1678.     added debugging to find error with poll() call
  1679.  
  1680. 2000-03-23  drscholl  <drscholl@users.sourceforge.net>
  1681.  
  1682.     * change.c, login.c, search.c:
  1683.     fixed bad log message in login() with missing arg for %s
  1684.  
  1685.     %s should be %d in log message in alter_port()
  1686.  
  1687. 2000-03-22  drscholl  <drscholl@users.sourceforge.net>
  1688.  
  1689.     * search.c:
  1690.     removed log message from cancel_search()
  1691.  
  1692.     * main.c:
  1693.     added extensive debugging checking if poll() fails with EINVAL
  1694.  
  1695.     * level.c, main.c, whois.c:
  1696.     allow normal user's to change their own level to leech
  1697.  
  1698.     don't call FD_ISSET on a fd with value -1
  1699.  
  1700.     the windows client can't part "" in the whois response, so ensure it always
  1701.     contains at least one space
  1702.  
  1703.     * handler.c, login.c, part.c, remove_connection.c, search.c:
  1704.     fixed memory leak in user_ip() which occurred when nick collisions happen
  1705.  
  1706.     removed debug log message from handle_connection() when unprocessed bytes
  1707.     remain
  1708.  
  1709.     rewrote cancel_search() to send final ACKs when a server quits before
  1710.     sending all acks
  1711.  
  1712.     * join.c:
  1713.     fixed botched send_cmd() in channel_level()
  1714.  
  1715.     * join.c, login.c, main.c, search.c:
  1716.     added more checks for out of memory conditions
  1717.  
  1718.     * join.c:
  1719.     allow channel_level() to be called with only the channel name to report the
  1720.     current level
  1721.  
  1722.     * login.c:
  1723.     display the ip address when a banned user attempts to log in
  1724.  
  1725.     * handler.c:
  1726.     use a binary search to look up the handler for each received message
  1727.  
  1728. 2000-03-21  drscholl  <drscholl@users.sourceforge.net>
  1729.  
  1730.     * napster.txt: updated protocol information
  1731.  
  1732.     * login.c, main.c:
  1733.     fixed memory leak in login() when the login fails
  1734.  
  1735.     exit main loop on poll() error
  1736.  
  1737.     * change.c, handler.c, join.c, napster.txt, opennap.h, part.c:
  1738.     added 'set user password' (753) admin command
  1739.  
  1740.     added 'set user speed' (625) admin command
  1741.  
  1742.     * main.c:
  1743.     fixed accept_connection() to check for out of memory errors
  1744.  
  1745.     * upload_complete.c:
  1746.     upload_ok() should call print_args() when it detects a malformed message
  1747.  
  1748.     * search.c:
  1749.     added checking for out of memory errors in search_internal()
  1750.  
  1751. 2000-03-20  drscholl  <drscholl@users.sourceforge.net>
  1752.  
  1753.     * main.c:
  1754.     bandwidth stats need to be printed with %f not %d
  1755.  
  1756.     * main.c:
  1757.     bandwidth usage stats were not in kbytes/sec.
  1758.  
  1759.     Last_Click was not updated.
  1760.  
  1761.     * join.c:
  1762.     invalid_channel returned 1 for count>0
  1763.  
  1764.     * buffer.c, handler.c, main.c, opennap.h:
  1765.     added total input/output bandwidth usage statistics.
  1766.  
  1767.     * join.c, login.c:
  1768.     added a check for valid channel name
  1769.  
  1770. 2000-03-19  drscholl  <drscholl@users.sourceforge.net>
  1771.  
  1772.     * TODO, join.c:
  1773.     check for missing channel name in join()
  1774.  
  1775. 2000-03-18  drscholl  <drscholl@users.sourceforge.net>
  1776.  
  1777.     * join.c, synch.c:
  1778.     synch_server() should send the channel level it is other than LEVEL_USER.
  1779.  
  1780.     * README, handler.c, join.c, opennap.h:
  1781.     added new command 10201 to set the minimum user level required to enter a
  1782.     channel.
  1783.  
  1784.     * ChangeLog, NEWS, configure:
  1785.     post release commit for 0.22
  1786.  
  1787. 2000-03-17  drscholl  <drscholl@users.sourceforge.net>
  1788.  
  1789.     * kill_user.c, unmuzzle.c:
  1790.     allow any user to kill/unmuzzle a user that is below their level
  1791.  
  1792.     * napster.txt, server_links.c:
  1793.     server_links() should allow the command to be issued by a remote user.
  1794.  
  1795.     updated the text for message 300 in napster.txt
  1796.  
  1797.     * download.c, login.c, opennap.h, opennap.spec, util.c:
  1798.     added print_args() utility function for use in dumping the input command for
  1799.     error messages
  1800.  
  1801.     * README, announce.c, configure.in, opennap.h:
  1802.     wallop() was using the wrong tag for the response to the client
  1803.  
  1804.     * handler.c:
  1805.     fixed error in encapsulated() where it was using con->sendbuf instead of
  1806.     con->recvbuf to get the packet to relay
  1807.  
  1808.     * README, free_user.c, login.c, opennap.h:
  1809.     removed log message from free_user()
  1810.  
  1811.     * NEWS, README, ban.c, init.c, login.c, napster.txt, network.c, part.c, search.c, textdb.c, AUTHORS:
  1812.     incorporated OS/2 port from Brian Smit <dbsoft@technologist.com>.
  1813.  
  1814.     fixes to compile cleanly under Solaris 2.7 with egcs 1.1.2
  1815.  
  1816.     updated REAMDE with list of supported operating systems.
  1817.  
  1818.     * handler.c, search.c:
  1819.     fixed memory leak in remote search functions if the server that we received
  1820.     the search request from splits before we send the ack for the search
  1821.  
  1822.     * README, announce.c, handler.c, opennap.h, part_channel.c, public.c, util.c:
  1823.     fixed bug in encapsulated() where the complete packet was not correctly
  1824.     relayed when the recipient of the message is not local.
  1825.  
  1826.     added format_message() utility function
  1827.  
  1828.     * buffer.c:
  1829.     minor modifications to buffer_decompress() to avoid unecessary operations
  1830.  
  1831.     * browse.c, buffer.c, client_quit.c, handler.c, upload_complete.c:
  1832.     removed additional extraneous logging messages
  1833.  
  1834.     rewrote the buffer_compress() routine in hopes of solving the server link
  1835.     problem.
  1836.  
  1837.     * download.c, handler.c, main.c, search.c:
  1838.     removed many log messages that are no longer really necessary.
  1839.  
  1840.     dispatch_command() will now dump the contents of the input buffer when it
  1841.     detects a command that is unknown, and will automatically close the
  1842.     connection to another server upon this error
  1843.  
  1844. 2000-03-16  drscholl  <drscholl@users.sourceforge.net>
  1845.  
  1846.     * add_file.c, announce.c, ban.c, buffer.c, change.c, download.c, free_user.c, handler.c, join.c, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, part.c, public.c, remove_connection.c, remove_file.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, topic.c, unmuzzle.c, util.c:
  1847.     made the server list a real LIST instead of an array.  removed global
  1848.     Num_Servers.  pass_message_args() will now return without doing anything if
  1849.     there are no connected servers so that each handler routine doesn't have to
  1850.     check for Servers!=0.
  1851.  
  1852. 2000-03-15  drscholl  <drscholl@users.sourceforge.net>
  1853.  
  1854.     * level.c:
  1855.     fixed broken log message causing a segfault
  1856.  
  1857.     * buffer.c, level.c:
  1858.     level() should register the nick if not present in the local db and the user
  1859.     level is moderator or higher.
  1860.  
  1861.     * join.c:
  1862.     the 406 join message should only be sent to local users
  1863.  
  1864.     * join.c, privmsg.c:
  1865.     fixed sequence of commands generated by the join commmand.
  1866.  
  1867.     removed commented out code from privmsg.c
  1868.  
  1869.     * join.c:
  1870.     fixed coredump on log message when a user has reached max channel membership
  1871.  
  1872. 2000-03-14  drscholl  <drscholl@users.sourceforge.net>
  1873.  
  1874.     * public.c:
  1875.     fixed bug with relaying the emote command to remote servers
  1876.  
  1877.     * handler.c, login.c, opennap.h:
  1878.     added register_user() command (10200) to allow admins to force registration
  1879.     of user accounts
  1880.  
  1881.     * login.c:
  1882.     user_ip() should use strtoul() to convert the string ip into an integer.
  1883.  
  1884.     * join.c, login.c, server_connect.c, server_login.c:
  1885.     modified join() to alloc the memory required before sending any messages to
  1886.     clients so that if memory runs out we can recover the state.
  1887.  
  1888.     server_connect() should allow duplicate connects to the same host on
  1889.     different ports.
  1890.  
  1891.     user_ip() should case the result of strtol() to unsigned int.
  1892.  
  1893.     server_login() should notify local admins when another server attempts to
  1894.     join
  1895.  
  1896. 2000-03-12  drscholl  <drscholl@users.sourceforge.net>
  1897.  
  1898.     * login.c:
  1899.     register_nick() should only fail if the user is already logged in.
  1900.  
  1901. 2000-03-11  drscholl  <drscholl@users.sourceforge.net>
  1902.  
  1903.     * search.c:
  1904.     need to keep a local flag in the DSEARCH struct for use with checking where
  1905.     to send the final ACK in remote_search_end.  if the local user logs off then
  1906.     search->con will be invalid so we can't use ISUSER(search->con) to decide.
  1907.  
  1908. 2000-03-10  drscholl  <drscholl@users.sourceforge.net>
  1909.  
  1910.     * Makefile.am, Makefile.in, configure, handler.c, opennap.spec, sample.servers, sample.users, textdb.c:
  1911.     handle_connection() should loop around read() when getting a packet header
  1912.     since some clients send it in two pieces
  1913.  
  1914.     added sample users and servers files, and a rpm spec file for building a
  1915.     binary package for Red Hat users.
  1916.  
  1917.     * handler.c:
  1918.     fixed partial packet header reading again.
  1919.  
  1920.     * handler.c:
  1921.     fix to read the packet header in multiple pieces
  1922.  
  1923.     * handler.c:
  1924.     check to see if 4 bytes of the header have been read after the initial
  1925.     read
  1926.  
  1927.     * handler.c:
  1928.     write a nul (\0) char at the end of the data in handle_connection() when
  1929.     an error is detected so that the log message is readable
  1930.  
  1931.     * handler.c:
  1932.     tag and len should be unsigned short integers
  1933.  
  1934.     * add_file.c:
  1935.     fix to abort nicely if the user hash table can't be allocated
  1936.  
  1937.     * buffer.c, handler.c, main.c, opennap.h, remove_connection.c:
  1938.     rewrote input handler to avoid allocating a new buffer every time data is
  1939.     read.  instead, a single buffer is reused and extended if required.  all
  1940.     input is processed as it is read now instead of breaking the reading and
  1941.     processing into two steps.
  1942.  
  1943.     * list.c, list.h:
  1944.     added macro LIST_NEW() as a wrapper around list_new() so that it gets
  1945.     inlined when DEBUG is turned on.
  1946.  
  1947. 2000-03-09  drscholl  <drscholl@users.sourceforge.net>
  1948.  
  1949.     * hotlist.c:
  1950.     fixed hotlist bug.  the hotlist entry was not being removed from the user's
  1951.     personal list in the CONNECTION struct
  1952.  
  1953.     * hotlist.c, opennap.h:
  1954.     more debugging to find the hotlist problem.
  1955.  
  1956.     * README, hotlist.c, list.c, list.h, sample.conf, util.c:
  1957.     added list_validate() function to be used in tracking down the hotlist bug
  1958.  
  1959.     * hotlist.c, opennap.h, remove_connection.c, util.c:
  1960.     simplified hotlist removal code by calling list_delete() instead of
  1961.     iterating through the list.
  1962.  
  1963.     need to set con->uopt.hotlist to 0 after call list_free() to avoid ASSERTing
  1964.     in cancel_search()
  1965.  
  1966.     * list.c:
  1967.     called FREE on the wrong pointer in list_delete()
  1968.  
  1969.     * util.c:
  1970.     seed the random number context with as many bytes as are read, even if less
  1971.     than requested.
  1972.  
  1973.     * add_file.c, hotlist.c:
  1974.     forgot to set hotlist->magic when creating a new entry
  1975.  
  1976.     forgot to set list->data when adding a file to the db
  1977.  
  1978.     * add_file.c, hotlist.c, join.c, list.c, list.h, remove_connection.c, search.c, textdb.c, userdb.c:
  1979.     removed all use of list_new() and list_append() to track down the memory
  1980.     leak.  the debug info should now show where the leaked memory is being
  1981.     allocated.
  1982.  
  1983.     * napster.txt, opennap.h, remove_connection.c, search.c, util.c:
  1984.     [napster.txt] changed text for 404 message to describe it as a generic error message
  1985.  
  1986.     [util.c] split_line should eat extra whitespace between fields
  1987.  
  1988.     when a local user quits, any pending searches should be marked as invalid so
  1989.     that when the results come back the ->con pointer in the DSEARCH structure
  1990.     is not used.
  1991.     rather than for a specific value.
  1992.  
  1993.     * search.c:
  1994.     should have compiled before committing the last fix.
  1995.  
  1996.     * search.c:
  1997.     duplicate tokens should not be added to the list in tokenize(). this makes
  1998.     the search function return the same file multiple times.
  1999.  
  2000.     * change.c, debug.c, join.c, list.c, login.c, main.c, part.c:
  2001.     reformatted some code with indent
  2002.  
  2003.     fixed memory leak in reginfo() where userdb_free() was not called.
  2004.  
  2005.     * add_file.c, debug.c:
  2006.     commented out memory dump from debug_cleanup()
  2007.  
  2008.     reformatted the code in add_file.c
  2009.  
  2010. 2000-03-08  drscholl  <drscholl@users.sourceforge.net>
  2011.  
  2012.     * login.c:
  2013.     db->lastSeen was set from get_level() when it should be atol()
  2014.  
  2015.     * login.c:
  2016.     db->nick was not set when creating a new db entry in reginfo()
  2017.  
  2018.     * download.c, login.c, resume.c, search.c, synch.c, upload_complete.c:
  2019.     changed most instances of %lu to %u since we only use 32-bit integers.
  2020.  
  2021.     * opennap.h, search.c, util.c, handler.c, main.c:
  2022.     only use /dev/random to seed the random context.  on servers the system
  2023.     random pool gets eaten up too fast.
  2024.  
  2025.     * debug.c, search.c, server_login.c, userdb.c:
  2026.     fixed to handle generate_search_id() returning NULL.
  2027.  
  2028. 2000-03-07  drscholl  <drscholl@users.sourceforge.net>
  2029.  
  2030.     * util.c:
  2031.     add_client did not set the .id member when growing the array.
  2032.  
  2033.     * login.c:
  2034.     user->pass was not free'd if there was an error during login
  2035.  
  2036.     * debug.c, join.c:
  2037.     no need to test for block->file being NULL when we are only referencing
  2038.     a static memory block.
  2039.  
  2040.     muzzled users should not be allowed to join chat channels
  2041.  
  2042.     * debug.c:
  2043.     debug code doesn't need to strdup() the file passed in, it can simply
  2044.     reference it since it is static memory.
  2045.  
  2046.     got rid of the .prev pointer in the BLOCK struct.  we can walk the list of
  2047.     block with a BLOCK** pointer instead.
  2048.  
  2049.     * TODO, download.c, upload_complete.c:
  2050.     fixed upload_ok() to use send_user() instead of send_cmd() since the
  2051.     downloader could be on a remote server.
  2052.  
  2053.     removed PostgreSQL from the TODO list since we no longer use a SQL db.
  2054.  
  2055.     * announce.c, kill_user.c, main.c, opennap.h, remove_connection.c, search.c, server_links.c, upload_complete.c, util.c:
  2056.     Modified the main loop to stop shifiting down the CONNECTION array to fill
  2057.     the holes.  add_client() will insert new connections into the holes, or
  2058.     grow the array if its all full.  Added new global Max_Clients which should
  2059.     be used in any contruct that needs to loop over all local connections,
  2060.     avoiding the entries that are set to NULL (holes).
  2061.  
  2062.     * buffer.c, main.c:
  2063.     use a new local variable numClients for the loop test constructs since
  2064.     Num_Clients gets changed by the accept_connection().  this may be the cause
  2065.     of all those immediate disconnects.
  2066.  
  2067.     * search.c:
  2068.     use a faster algorithm for walking the list when deleting invalid entries
  2069.     from the files list
  2070.  
  2071.     * search.c:
  2072.     tokenize() should ignore common words because they are not useful in
  2073.     searching
  2074.  
  2075.     fdb_collect_garbage() will now print messages about bins with more than
  2076.     10,000 entries so that they can be considered for addition to the ignore
  2077.     list
  2078.  
  2079.     * AUTHORS, configure.in, init.c, main.c, network.c, opennap.h, timer.c:
  2080.     solaris port (jones@users.sourceforge.net)
  2081.  
  2082.     * add_file.c, browse.c, client_quit.c, download.c, handler.c, opennap.h, remove_file.c, server_login.c, synch.c, upload_complete.c, util.c, whois.c:
  2083.     added the ability to download files and browse users on other servers
  2084.  
  2085.     server stats for users/files/size is again global for all linked servers
  2086.  
  2087. 2000-03-06  drscholl  <drscholl@users.sourceforge.net>
  2088.  
  2089.     * add_file.c, announce.c, ban.c, browse.c, change.c, client_quit.c, download.c, handler.c, hash.c, join.c, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, part.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, userdb.c, util.c, whois.c:
  2090.     server message are no longer automatically forwarded by handle_connection().
  2091.     each handler is now responsible for forwarding the message if necessary.
  2092.  
  2093.     implemented the ability to search on remote servers so that the entire file
  2094.     database isn't replicated on every server.
  2095.  
  2096.     several of the server query functions now take an optional server argument
  2097.     to get the status of a remote server rather than the one the client is
  2098.     connected to.
  2099.  
  2100.     * sample.conf, config.c, init.c, main.c, network.c, opennap.h:
  2101.     added max_data_size and max_rss_size configuration variables to adjust
  2102.     sytem limits on memory usage per process
  2103.  
  2104.     * change.c, server_connect.c:
  2105.     fixes to compile cleanly with debugging turned off
  2106.  
  2107.     * opennap.h, textdb.c, util.c:
  2108.     added `#define USE_CRLF 1' for use on win32 to write \r\n at the end of each
  2109.     line in the database
  2110.  
  2111.     modified next_arg() to use space, \r, \n and \t as word separators, and to
  2112.     set the argument to 0 when hitting the \0 in the source string to avoid
  2113.     returning an extra empty string
  2114.  
  2115.     * Makefile.in, add_file.c, ban.c, buffer.c, configure, configure.in, hotlist.c, login.c, main.c, opennap.h, public.c, server_connect.c, server_login.c, synch.c, textdb.c, timer.c, userdb.c, util.c:
  2116.     created logerr() macro as a wrapper for libc errors
  2117.  
  2118.     used OUTOFMEMORY() macro when memory errors occur
  2119.  
  2120.     don't use next_arg() in public() because it will strip leading space from
  2121.     the user's message
  2122.  
  2123. 2000-03-04  drscholl  <drscholl@users.sourceforge.net>
  2124.  
  2125.     * Makefile.am, README, config.c, configure.in, main.c, opennap.h, sample.conf, textdb.c, textdb.h, userdb.c:
  2126.     removed all variables pertaining to mysql
  2127.  
  2128.     updated the installation instructions to reference the new flat text file
  2129.     user and server databases
  2130.  
  2131.     * Makefile.am, Makefile.in, change.c, compress.c, config.c, configure, configure.in, create_db.sql, db.c, init.c, level.c, login.c, main.c, opennap.h, sample.conf, server_connect.c, server_login.c, textdb.c, textdb.h, userdb.c, whois.c:
  2132.     removed all references to MySQL from the code base.
  2133.  
  2134.     added flat file text database for use with user and server lists.
  2135.  
  2136. 2000-03-03  drscholl  <drscholl@users.sourceforge.net>
  2137.  
  2138.     * search.c:
  2139.     reenable code to reject search matches for a user's own files
  2140.  
  2141.     search term for equality is "EQUAL TO", not "EQUALS" according to the
  2142.     protocol specification.
  2143.  
  2144.     added error reporting to the client if the comparison operation in a search
  2145.     string is unknown.
  2146.  
  2147.     * getopt.c, main.c:
  2148.     added copyright notice to getopt.c
  2149.  
  2150.     fixed broken usage() output
  2151.  
  2152.     * ChangeLog, Makefile.in, NEWS, README:
  2153.     ChangeLog is now generated by rcs2log.
  2154.  
  2155.     Moved contents of the NEWS file into README.  NEWS is for user visible
  2156.     changes in accordance with the GNU standards.
  2157.  
  2158.     * Makefile.am, opennap.dsp, opennap.opt, opennap.plg:
  2159.     integrated updated visual c++ files
  2160.  
  2161.     * init.c, main.c, network.c, opennap.h, getopt.c:
  2162.     fixes to compile under win2k (Damian Hodgkiss)
  2163.  
  2164.     * napster.txt, whois.c:
  2165.     fixed bug in whois response.  the total downloads comes before total uploads
  2166.     in the mod+ version
  2167.  
  2168.     added additional documentation on the 613 and 626 commands.
  2169.  
  2170. 2000-03-02  drscholl  <drscholl@users.sourceforge.net>
  2171.  
  2172.     * join.c, timer.c:
  2173.     needed to include stdlib.h to compile cleanly without debugging on
  2174.  
  2175.     * ChangeLog, add_file.c, config.c, login.c, main.c, opennap.h, remove_connection.c, search.c:
  2176.     removed old code and and -DLESSMEMORY flag since that is now the default
  2177.  
  2178.     modified core search function to using str*() functions instead of calling
  2179.     tokenize() on the filename
  2180.  
  2181.     fixed bug in login() where the number of fields in the client login (6)
  2182.     was not checked, which lead to a coredump if the last field was not present.
  2183.  
  2184.     * hash.c, hash.h, list.c, opennap.h:
  2185.     catch out of memory error conditions in list and hash functions
  2186.  
  2187.     * hotlist.c, list.c:
  2188.     reconciled differences in hotlist code
  2189.  
  2190.     * NEWS, hotlist.c, remove_connection.c:
  2191.     fixed memory leak in remove_connection() where it did not free empty hotlist
  2192.     entries
  2193.  
  2194.     * login.c: dont allow nul usernames
  2195.  
  2196.     * main.c, napster.txt, public.c:
  2197.     fixed emote command to check for required quotes around the text portion
  2198.     of the message.
  2199.  
  2200. 2000-03-01  drscholl  <drscholl@users.sourceforge.net>
  2201.  
  2202.     * getopt.c:
  2203.     added getopt() replacement for Win32 which doesn't have this function
  2204.  
  2205.     * join.c, list_channels.c, list_users.c, part.c, part_channel.c, public.c, synch.c, topic.c, util.c:
  2206.     fixed compilation errors with new list code
  2207.  
  2208.     * Makefile.am, Makefile.in, add_file.c, buffer.c, change.c, client_quit.c, download.c, free_user.c, handler.c, hotlist.c, join.c, kill_user.c, level.c, list.c, list.h, login.c, main.c, muzzle.c, opennap.h, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, search.c, server_connect.c, server_links.c, server_login.c, server_usage.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c:
  2209.     added new files list.c and list.h to contain the generic list routines.
  2210.  
  2211.     switch to using LIST instead of arrays for many things which don't need to
  2212.     be directly indexed.
  2213.  
  2214.     optimized USER and CONNECTION structs to require as little memory as
  2215.     possible.
  2216.  
  2217.     * main.c, opennap.h:
  2218.     optimized fields in the DATUM struct to be as small as possible
  2219.  
  2220.     * TODO, add_file.c, hotlist.c, opennap.h, search.c:
  2221.     added -DLESSMEMORY to force the server to regenerate the token list when
  2222.     comparing rather than storing it in the database
  2223.  
  2224.     * main.c, timer.c:
  2225.     changed next_timer() to return the time offset in seconds of when the next
  2226.     timer is scheduled
  2227.  
  2228.     * network.c:
  2229.     need to include sys/time.h before sys/resouce.h on bsdi
  2230.  
  2231.     * main.c, opennap.h, timer.c:
  2232.     added next_timer() function to give the time at which the next pending event
  2233.     is scheduled.  the main even loop in the server should never block for
  2234.     longer than when a pending even is scheduled
  2235.  
  2236.     * ChangeLog, Makefile.am, Makefile.in, ban.c, init.c, join.c, main.c, opennap.h, timer.c:
  2237.     added timer functions for scheduling periodic events (colten edwards)
  2238.  
  2239.     added global variable Current_Time which is set once per iteration of the
  2240.     main loop.  functions which need the current time should use this variable
  2241.     rather than calling time()
  2242.  
  2243.     * buffer.c, hotlist.c:
  2244.     removed error message that were too verbose from send_queued_data() and
  2245.     add_hotlist()
  2246.  
  2247.     * init.c:
  2248.     handle SIGPIPE to avoid terminating the process when writing to a connection
  2249.     that got shut down
  2250.  
  2251.     * add_file.c, search.c:
  2252.     added additional debugging output to the add_file() and associated
  2253.     routines
  2254.  
  2255.     * main.c:
  2256.     moved the check for connections to the stats port to before the new
  2257.     connections port since the latter modifies Num_Clients and it was throwing
  2258.     of the check for connections to the stats port
  2259.  
  2260.     * handler.c, init.c:
  2261.     fixes to compile cleanly with debugging turned off
  2262.  
  2263.     * browse.c, search.c:
  2264.     allow max_browse_result to be 0 to indicate unlimited
  2265.  
  2266.     added additional debugging to free_flist()
  2267.  
  2268. 2000-02-29  drscholl  <drscholl@users.sourceforge.net>
  2269.  
  2270.     * Makefile.in, handler.c, init.c, main.c, opennap.h, Makefile.am:
  2271.     main.c was getting too big. broke out initialization code into init.c and
  2272.     connection handling code into handler.c
  2273.  
  2274.     * ChangeLog, main.c, network.c:
  2275.     added support for the opennap server to listen on port 8889 to report stats
  2276.     about the server to interested parties
  2277.  
  2278.     * NEWS, add_file.c, ban.c, configure, configure.in, kill_user.c, opennap.h, privmsg.c, public.c, topic.c, util.c:
  2279.     added various checks for memory exhaustion to recover "gracefully"
  2280.  
  2281.     * ChangeLog, FAQ, network.c, search.c, util.c:
  2282.     check for out of memory errors in tokenize()
  2283.  
  2284. 2000-02-28  drscholl  <drscholl@users.sourceforge.net>
  2285.  
  2286.     * add_file.c, ban.c, config.c, configure, configure.in, main.c, network.c, opennap.h, sample.conf:
  2287.     allow max_shared to be 0 to allow unlimited sharing
  2288.  
  2289.     added new config vars 'uid' and 'gid' to specify the uid/gid to switch to
  2290.     if running as root (uid 0)
  2291.  
  2292.     added new config var 'connection_hard_limit' to specify the maxium number
  2293.     of file descriptors the process can use
  2294.  
  2295.     added configure option --with-fd-setsize to specify the maxium number of
  2296.     filedescriptor that can be used on select() based systems
  2297.  
  2298.     * config.c, main.c, opennap.h:
  2299.     added new config variable `collect_interval' to control the interval between
  2300.     garbage collection
  2301.  
  2302.     * buffer.c, change.c, level.c, login.c, napster.txt, opennap.h, privmsg.c, util.c:
  2303.     fixes to compile cleanly with --disable-debug
  2304.  
  2305.     added safe_realloc() function for detection of memory exhaustion
  2306.  
  2307. 2000-02-27  drscholl  <drscholl@users.sourceforge.net>
  2308.  
  2309.     * hotlist.c:
  2310.     print tag value out when the user attempts to add another user already in
  2311.     their hotlist
  2312.  
  2313.     * add_file.c, free_user.c, hotlist.c, resume.c, util.c:
  2314.     log() messages in add_file() and share_file() were missing the nick, causing
  2315.     a segfault
  2316.  
  2317. 2000-02-26  drscholl  <drscholl@users.sourceforge.net>
  2318.  
  2319.     * opennap.h, resume.c:
  2320.     rearranged members of the DATUM struct.
  2321.  
  2322.     added additional debug statement to resume()
  2323.  
  2324.     * add_file.c, opennap.h, search.c, synch.c:
  2325.     added a new content type CT_MP3 to serve as a default.  CT_AUDIO doesn't
  2326.     necessarily mean audio/mp3
  2327.  
  2328.     * ChangeLog, FAQ, add_file.c, main.c, metaserver.c, opennap.h, search.c, synch.c:
  2329.     restored sharing of multimedia files.
  2330.  
  2331.     * ChangeLog:
  2332.     updated ChangeLog with recent changes
  2333.  
  2334.     * buffer.c, main.c:
  2335.     modified buffer_compress() to allocate one 16k output buffer and compresss
  2336.     as much data as will fit in it.  this is necessary since queue_data() can
  2337.     now produce multiple 16k buffer chunks for server connections.
  2338.  
  2339. 2000-02-25  drscholl  <drscholl@users.sourceforge.net>
  2340.  
  2341.     * main.c:
  2342.     changed listen() queue backlog to a value of 50
  2343.  
  2344.     * README, main.c, opennap.h, server_usage.c:
  2345.     added number of global users, server start time, and server uptime to the
  2346.     10115 server stats reply
  2347.  
  2348.     * kill_user.c:
  2349.     should set user->con->destroy=1 when killing a local user, not con->destroy
  2350.  
  2351.     * main.c, search.c:
  2352.     if multiple FILENAME CONTAINS clauses are specified, treat them as an
  2353.     implicit AND operation
  2354.  
  2355.     * Makefile.in, main.c, opennap.h, search.c:
  2356.     added a garbage collection routine to run every 60 seconds to free up memory
  2357.     associated with invalid entries
  2358.  
  2359.     * ChangeLog, Makefile.am, README, main.c, opennap.h, server_links.c:
  2360.     added new command 10112 to show the server links (colten edwards)
  2361.  
  2362.     * AUTHORS, ChangeLog, Makefile.am, Makefile.in, debug.c, debug.h, main.c, opennap.h, server_usage.c:
  2363.     added a new command 10115 for getting some useful information about the
  2364.     server (colten edwards)
  2365.  
  2366.     * upload_complete.c:
  2367.     upload_ok() was looking in the downloader's hash table for the file info,
  2368.     should be the uploader's table
  2369.  
  2370.     * main.c:
  2371.     forgot to uncomment the free_hash() on the File_Table
  2372.  
  2373.     * search.c:
  2374.     nick was printed using %d instead of %s when returing search results
  2375.  
  2376.     * search.c:
  2377.     fdb_search() should return if it can't find a search token in the hash table
  2378.     since we can be sure there are no matches
  2379.  
  2380.     * search.c: fixed bug in fdb_search()
  2381.  
  2382.     * ChangeLog, whois.c:
  2383.     minor whois change
  2384.  
  2385.     * browse.c, buffer.c, change.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, free_user.c, hash.c, login.c, main.c, opennap.h, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, synch.c, upload_complete.c, util.c, add_file.c:
  2386.     wrote new database for storing the library.  we now use a hash table based
  2387.     on word tokens in the filename, with a list of files for each word
  2388.  
  2389.     modified malloc debugger to use a hash table to store the allocation
  2390.     information because a single list was too slow for large amounts of data
  2391.  
  2392.     modified buffer_queue() to allocate chunks of memory and allocate a new
  2393.     buffer in the list if there is not enough room to append, instead of using
  2394.     realloc.  this should improve performace
  2395.  
  2396.     began adding extra checks for when we run out of memory so that we can
  2397.     recover gracefully.
  2398.  
  2399. 2000-02-24  drscholl  <drscholl@users.sourceforge.net>
  2400.  
  2401.     * main.c:
  2402.     we should force a call to send_queued_data() in main() if the connection is
  2403.     about to be shut down.  in this case we write as much as we can before we
  2404.     close the socket.
  2405.  
  2406.     * main.c:
  2407.     no longer necessary to check for existence of the client pointer because
  2408.     it won't be removed except by the main() routine itself.
  2409.  
  2410.     * buffer.c, kill_user.c, login.c, main.c, opennap.h, remove_connection.c, server_connect.c:
  2411.     remove_connection() should now only be called from the main() routine.
  2412.     other functions that wish the client connection to be shut down should
  2413.     set the .destroy memory to a nonzero value.
  2414.  
  2415.     * whois.c, change.c:
  2416.     username was printed out using %d instead of %s in alter_port()
  2417.  
  2418.     the whois response now inclues the server the user is connected to if the
  2419.     user level of the client issuing the request is admin+
  2420.  
  2421.     * buffer.c:
  2422.     send_queued_data() should call buffer_free() on the output buffer before
  2423.     calling remove_connection()
  2424.  
  2425.     * buffer.c, main.c:
  2426.     send_queued_data() should call remove_connection() instead of setting
  2427.     con->destroy=1 since it is safe to free the CONNECTION pointer at
  2428.     that point.
  2429.  
  2430. 2000-02-23  drscholl  <drscholl@users.sourceforge.net>
  2431.  
  2432.     * download.c: more logging in download()
  2433.  
  2434.     * buffer.c, client_quit.c, download.c, free_user.c, remove_file.c:
  2435.     need to call fudge_path() on filename before SQL query in remove_file()
  2436.  
  2437.     fixed download() to send the correct 203 command when the uploader is
  2438.     firewalled.
  2439.  
  2440.     added log messages for sending/receving client quit messages
  2441.  
  2442.     * download.c:
  2443.     queue_limit() should check for mysql_num_rows() > 0 before calling
  2444.     mysql_fetch_row()
  2445.  
  2446.     * client_quit.c, download.c, kill_user.c, napster.txt:
  2447.     fixed client_quit() to avoid calling hash_remove() when it detects a QUIT for
  2448.     a local user
  2449.  
  2450.     * ChangeLog, main.c:
  2451.     send_queued_data() should be called if there is uncompressed data waiting to
  2452.     be sent to the server
  2453.  
  2454.     * client_quit.c, download.c, kill_user.c, login.c, main.c, remove_file.c, upload_complete.c:
  2455.     reformatted log() messages for the upload/download functions
  2456.  
  2457. 2000-02-22  drscholl  <drscholl@users.sourceforge.net>
  2458.  
  2459.     * login.c, main.c:
  2460.     alter_port() was not listed in the handler callback table
  2461.  
  2462.     * download.c, kill_user.c:
  2463.     download() should use validate_user() instead of just VALID()
  2464.  
  2465.     use next_arg() in kill_user() instead of plain strchr()
  2466.  
  2467.     * buffer.c, change.c:
  2468.     fixed buffer_uncompress() to set .datamax when calling realloc().
  2469.  
  2470.     * ChangeLog, buffer.c, opennap.h:
  2471.     modified buffer_queue() to allocate memory in 1k chunks to avoid calling
  2472.     realloc() too often
  2473.  
  2474.     modified buffer_compress() to allocate memory in 2k chunks to avoid calling
  2475.     realloc() too often
  2476.  
  2477.     * ChangeLog, network.c, opennap.h, server_login.c:
  2478.     set SO_SNDBUF and SO_RCVBUF to 16k for server-server tcp connections
  2479.  
  2480.     * ChangeLog, change.c, opennap.h:
  2481.     added support for 613 command for admin to alter the data port the client is
  2482.     listening on (only works with the win32 clients)
  2483.  
  2484.     * ChangeLog, browse.c, buffer.c, config.c, main.c, napster.txt, opennap.h, resume.c, search.c:
  2485.     calls to write() should check for EWOULDBLOCK to avoid closing the
  2486.     connection unnecessarily
  2487.  
  2488.     added max_browse_result config variable to control the maxium number of
  2489.     entries returned on a /browse command (default 1500)
  2490.  
  2491.     allow max_search_result to be 0 to allow for arbitrary size searches
  2492.  
  2493.     * public.c:
  2494.     fixed bug where the first char of a public message gets chopped off
  2495.  
  2496.     * db.c, login.c, public.c, resume.c:
  2497.     reduced max filename size to 150 to try to avoid mysqld crashes.
  2498.  
  2499.     fixed bug in resume() where the md5 attribute was not quoted in the SQL
  2500.     query.
  2501.  
  2502.     change order in login() to wait until after the login/email ack has been
  2503.     sent before sending the notification of the user level being changed to
  2504.     avoid breaking the win32 client.
  2505.  
  2506. 2000-02-19  drscholl  <drscholl@users.sourceforge.net>
  2507.  
  2508.     * download.c:
  2509.     functions that call transfer_wrapper() need to check the return value
  2510.  
  2511.     * ChangeLog, add_file.c, config.c, configure, configure.in, login.c, main.c, metaserver.c, network.c, opennap.h, search.c:
  2512.     added fixes for clean compile under Solaris 2.6
  2513.  
  2514.     handle_connection() now prints the tag and how many bytes it is waiting for
  2515.     when it detects that it needs to wait for the whole data packet to arrive
  2516.  
  2517. 2000-02-18  drscholl  <drscholl@users.sourceforge.net>
  2518.  
  2519.     * README, main.c, opennap.h, privmsg.c, whois.c:
  2520.     mod+ users are now notified when someone does a /whois on them
  2521.  
  2522.     * db.c, debug.c, network.c, remove_connection.c:
  2523.     debug_malloc() should exit gracefully if memory runs out
  2524.  
  2525.     adjust the size of the filename field in the library SQL table to be 237
  2526.     chars.  mysql 3.22.23 seems to crash if the fields is any longer.
  2527.  
  2528.     * README, db.c:
  2529.     optimized the library SQL table to use as small as possible size integers
  2530.  
  2531.     * remove_file.c:
  2532.     added more ASSERT() tests for Num_Files<0
  2533.  
  2534.     * free_user.c, remove_file.c, sample.conf:
  2535.     added debugging code to try and detect when Num_Files < 0
  2536.  
  2537.     * ChangeLog, Makefile.in, aclocal.m4, configure, configure.in:
  2538.     added AM_MAINTAINER_MODE macro to configure.in
  2539.  
  2540.     * search.c:
  2541.     fixed the search() function for the linespeed,bitrate&frequency attributes
  2542.     where an `&&' was not placed before the test in the SQL query string.
  2543.  
  2544. 2000-02-17  drscholl  <drscholl@users.sourceforge.net>
  2545.  
  2546.     * ChangeLog, NEWS, README, level.c, napster.txt:
  2547.     modified level() to update the db for registered accounts when a user's
  2548.     level is changed, so that it is persistent across logins
  2549.  
  2550.     * login.c:
  2551.     fixed bug in register_nick() where there was no "return;" when the MySQL
  2552.     query failed.
  2553.  
  2554.     * download.c, napster.txt:
  2555.     fixed broken queue limit server message (620) which did not include the file
  2556.     size
  2557.  
  2558.     * configure, configure.in, opennap.h:
  2559.     added --disable-random option to configure to turn off use of /dev/random
  2560.     on machines which have it
  2561.  
  2562. 2000-02-16  drscholl  <drscholl@users.sourceforge.net>
  2563.  
  2564.     * config.c, main.c, opennap.h:
  2565.     added listen_addr config variable to specify which interface to listen on
  2566.  
  2567.     * buffer.c, download.c, util.c:
  2568.     added better handling for bad input in the download functions
  2569.  
  2570.     validate_user() should check for at least a valid pointer on the .con member
  2571.     if its non-null
  2572.  
  2573.     * buffer.c:
  2574.     took extraneous assert() out of buffer_consume() to clean up error
  2575.     messages.
  2576.  
  2577.     * download.c:
  2578.     fixed compilation error in queue_limit()
  2579.  
  2580.     * download.c, main.c, napster.txt, opennap.h, server_login.c:
  2581.     added support for the user queue limit command (619/620)
  2582.  
  2583.     added additional debugging in server_login_ack()
  2584.  
  2585. 2000-02-15  drscholl  <drscholl@users.sourceforge.net>
  2586.  
  2587.     * login.c:
  2588.     added more debugging check for a duplicat login message sent from clients
  2589.  
  2590.     * login.c:
  2591.     added additional debugging output to login() and register_nick()
  2592.  
  2593.     * main.c:
  2594.     modified update_stats() to print the current system time
  2595.  
  2596.     * opennap.h, whois.c, add_file.c, buffer.c, change.c, hash.c, main.c:
  2597.     win32 port for 0.12
  2598.  
  2599. 2000-02-14  drscholl  <drscholl@users.sourceforge.net>
  2600.  
  2601.     * AUTHORS, ChangeLog, Makefile.am, Makefile.in, NEWS, announce.c, browse.c, buffer.c, change.c, config.c, db.c, download.c, free_user.c, join.c, login.c, main.c, md5.c, motd.c, network.c, opennap.dsp, opennap.dsw, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, snprintf.c, synch.c, topic.c, upload_complete.c, util.c, whois.c:
  2602.     win32 port from "Damian Hodgkiss" <mian@thirty4.com>
  2603.  
  2604.     default client queue length set to 100kbytes
  2605.  
  2606. 2000-02-13  drscholl  <drscholl@users.sourceforge.net>
  2607.  
  2608.     * opennap.h, public.c, util.c:
  2609.     fixed broken emote() function to avoid segfaults
  2610.  
  2611. 2000-02-12  drscholl  <drscholl@users.sourceforge.net>
  2612.  
  2613.     * login.c, main.c, motd.c, napster.txt, opennap.h, public.c:
  2614.     added support for client request for motd (621)
  2615.  
  2616.     * main.c, napster.txt, opennap.h, public.c:
  2617.     added support for the emote (824) command
  2618.  
  2619. 2000-02-11  drscholl  <drscholl@users.sourceforge.net>
  2620.  
  2621.     * main.c, network.c, opennap.h:
  2622.     try_connect() needs to bind_interface() before calling connect()
  2623.  
  2624.     * network.c: oops, busted lookup_ip()
  2625.  
  2626.     * main.c, network.c:
  2627.     fixed broken log() format in handle_connection() when printing out the
  2628.     message received from a client is unknown
  2629.  
  2630.     * Makefile.am, Makefile.in, main.c:
  2631.     removed Id: from Makefile.am since it got passed to Makefile.in and was
  2632.     screwing things up
  2633.  
  2634.     * server_login.c:
  2635.     server_login() should send errors using message 0, not 404
  2636.  
  2637.     * login.c:
  2638.     added check for a nick with nonprintable ascii chars
  2639.  
  2640. 2000-02-10  drscholl  <drscholl@users.sourceforge.net>
  2641.  
  2642.     * Makefile.in, add_file.c, download.c:
  2643.     fixes for download_end() and upload_end() to prevent subtracting from the
  2644.     counts if the count is 0
  2645.  
  2646. 2000-02-08  drscholl  <drscholl@users.sourceforge.net>
  2647.  
  2648.     * ChangeLog, Makefile.am, Makefile.in, change.c, main.c, opennap.h, spynap.c:
  2649.     removed spynap from the distribution
  2650.  
  2651.     added support for the change email (702) command
  2652.  
  2653.     * TODO, change.c, main.c, napster.txt, opennap.h:
  2654.     added support for the change password (701) command
  2655.  
  2656.     * kill_user.c, login.c, opennap.h, whois.c:
  2657.     added support for the whowas (605) server response
  2658.  
  2659.     kill_user() did not skip the colon (:) prefix on the server name
  2660.  
  2661.     * login.c:
  2662.     register_nick() had compilation warnings about unused variables `pkt' and `len'
  2663.  
  2664.     * login.c:
  2665.     removed spurious colon (:) from the SQL query in reginfo()
  2666.  
  2667.     the colon (:) before the server name was not skipped in reginfo()
  2668.  
  2669.     * util.c:
  2670.     pass_message() should not assert on validate_connection() since it can be
  2671.     NULL when generating a new message.
  2672.  
  2673.     * free_user.c, login.c, opennap.h, synch.c, util.c:
  2674.     need to store the user password in order to do user registration on multiple
  2675.     servers
  2676.  
  2677. 2000-02-07  drscholl  <drscholl@users.sourceforge.net>
  2678.  
  2679.     * Makefile.in, configure, configure.in, network.c:
  2680.     freebsd does not have socklen_t, so add a check for it in configure.in
  2681.  
  2682. 2000-02-05  drscholl  <drscholl@users.sourceforge.net>
  2683.  
  2684.     * ChangeLog, NEWS, README, TODO, config.c, create_db.sql, login.c, main.c, opennap.h:
  2685.     added support for account registration
  2686.  
  2687. 2000-02-04  drscholl  <drscholl@users.sourceforge.net>
  2688.  
  2689.     * Makefile.in, main.c:
  2690.     change_speed() was not in the lookup table in main.c
  2691.  
  2692.     * Makefile.in, opennap.h, server_connect.c:
  2693.     fix to prevent server_connect() from tyring to link the same server twice
  2694.  
  2695.     * Makefile.in, add_file.c, change.c, configure, configure.in, free_user.c, main.c, napster.txt, opennap.h, remove_file.c, search.c, synch.c, util.c:
  2696.     removed minidb support.
  2697.  
  2698.     cleaned up search() routine.
  2699.  
  2700.     * Makefile.in, add_file.c, change.c, configure, configure.in, free_user.c, main.c, napster.txt, opennap.h, remove_file.c, search.c, synch.c, util.c:
  2701.     added support for a mini-db instead of MySQL for storing the library.
  2702.  
  2703.     * main.c, synch.c:
  2704.     fix to avoid looping endlessly when POLLHUP is set for a client connection.
  2705.  
  2706.     * main.c, search.c, synch.c, ChangeLog, Makefile.in:
  2707.     search() should return a 404 error if the search failed
  2708.  
  2709.     modified synch_server() to first sync the users and channels, then do a bulk
  2710.     dump of the library table in hopes of improving performance.
  2711.  
  2712. 2000-02-03  drscholl  <drscholl@users.sourceforge.net>
  2713.  
  2714.     * ChangeLog, Makefile.in, NEWS, add_file.c, configure, configure.in, main.c, metaserver.c, motd.c:
  2715.     added support for poll() on systems that support it
  2716.  
  2717.     fixed bug in share_file() where the escaped path was not used in the sql
  2718.     query to insert the row
  2719.  
  2720.     fixed bug in share_file() where the information on the file size was not
  2721.     incorporated into the global stats
  2722.  
  2723.     * Makefile.in, configure, configure.in, main.c, metaserver.c:
  2724.     added support for using poll() on systems that support it
  2725.  
  2726.     * add_file.c:
  2727.     share_file() forgot to quote the filename in the sql query
  2728.  
  2729.     fixed compute_soundex() to avoid generates hases over 4 chars long
  2730.  
  2731.     * ban.c, search.c:
  2732.     fixed bug in search() when specifying the TYPE field
  2733.  
  2734.     banlist() should return an empty ban request packet to indicate the end of
  2735.     the list.
  2736.  
  2737. 2000-02-02  drscholl  <drscholl@users.sourceforge.net>
  2738.  
  2739.     * ChangeLog, Makefile.am, Makefile.in, change.c, metaserver.c:
  2740.     change_speed() needs to update the library table to reflect a speed change
  2741.  
  2742.     * ChangeLog, Makefile.in, README, TODO, ban.c, buffer.c, debug.c, debug.h, free_user.c, hash.c, hotlist.c, kill_user.c, login.c, napster.txt, remove_connection.c, remove_file.c, resume.c, server_connect.c, synch.c, topic.c, util.c, whois.c:
  2743.     fixes to compile cleanly with debugging turned off (not recommended though)
  2744.  
  2745.     * Makefile.in, aclocal.m4, configure, configure.in, md5.h, server_login.c, util.c:
  2746.     finished integration of the md5 routines from GNU md5sum (textutils)
  2747.  
  2748.     * ChangeLog, Makefile.am, NEWS, global.h, md5.c, md5.h, md5c.c:
  2749.     removed md5.h, global.h and md5c.c since they don't work on Alpha, switch to
  2750.     using version from the md5sum program in GNU textutils
  2751.  
  2752.     * Makefile.in, aclocal.m4, add_file.c, buffer.c, compress.c, configure, debug.c, debug.h, hash.c, hash.h, main.c, metaserver.c, network.c, opennap.h, server_connect.c, server_login.c, util.c:
  2753.     fixes to compile under RedHat Linux 6.0 (Alpha)
  2754.  
  2755.     * buffer.c, login.c, main.c, opennap.h:
  2756.     if a client connects from localhost, the external ip address should be used
  2757.     so that remote users can connect to their data port
  2758.  
  2759. 2000-02-01  drscholl  <drscholl@users.sourceforge.net>
  2760.  
  2761.     * synch.c:
  2762.     fixed synch_user() so that it will not sync users that come from behind
  2763.     the server we are syncing with
  2764.  
  2765.     * public.c:
  2766.     fixed bug in public() where a middle server would rebroadcast all received
  2767.     messages ending up doubling the messages to clients
  2768.  
  2769.     * Makefile.am, Makefile.in, buffer.c, free_user.c, main.c, remove_connection.c:
  2770.     use `unsigned long' instead of ulong for portability
  2771.  
  2772.     fixed bug in handle_connection() where the call to add_random_bytes had
  2773.     arguments without con->
  2774.  
  2775.     server_split was issuing QUIT messages for all users when a server split
  2776.     happened.
  2777.  
  2778.     free_user() should check for user->email != 0 before free()ing it
  2779.  
  2780.     * README, add_file.c, opennap.h, synch.c:
  2781.     synch_user needed to use the new 10300 (share file) message to sync non-mp3
  2782.     data.
  2783.  
  2784.     share_file() now checks to make sure the content-type looks valid by
  2785.     inspecting the major MIME type
  2786.  
  2787.     added additional information on the new 10300 message to the README
  2788.  
  2789.     * ChangeLog, README, add_file.c, db.c, free_user.c, main.c, opennap.h, search.c, spynap.c:
  2790.     added support for sharing generic media types other than mp3
  2791.  
  2792.     * Makefile.am, Makefile.in, spynap.c:
  2793.     added md5 hash checking on downloads to spynap
  2794.  
  2795. 2000-01-31  drscholl  <drscholl@users.sourceforge.net>
  2796.  
  2797.     * main.c:
  2798.     assertion in dispatch_command was in error, the length really was 0xee.  use
  2799.     VALID_LEN() to test for buffer overrun instead.
  2800.  
  2801.     * main.c, util.c:
  2802.     added additional ASSERT() in dispatch_command() to track down buffer overrun
  2803.  
  2804.     * buffer.c, free_user.c, ping.c:
  2805.     free_user() should not remove files from the db when a signal is caught, it
  2806.     should just free the memory assocated with the structure
  2807.  
  2808.     fixed bug in buffer_group() where the number of consumed bytes in the next
  2809.     buffer was not skipped
  2810.  
  2811.     ping/pong now xmit any optional arguments the clients pass to them
  2812.  
  2813. 2000-01-30  drscholl  <drscholl@users.sourceforge.net>
  2814.  
  2815.     * buffer.c:
  2816.     more fixes in attempt to solve the pop_user missing user nick on server
  2817.     message.
  2818.  
  2819.     changed buffer_validate() to not try to validate the ->next pointer other
  2820.     than it is a valid pointer.
  2821.  
  2822.     * buffer.c, util.c:
  2823.     buffer_compress() assumed that the input buffer was not already partially
  2824.     consumed.  this should not happen, but it looks like it does in certain
  2825.     circumstances.
  2826.  
  2827.     * ChangeLog, add_file.c, buffer.c, main.c, napster.txt, search.c:
  2828.     changed add_file() to print out errors back the user when a file is not
  2829.     added to the db.
  2830.  
  2831.     changed add_file() to use a ulong instead of int for storing the file size.
  2832.  
  2833.     send_queued_data() did not print out the con->host even though there was a
  2834.     %s for it, caused a segfault.
  2835.  
  2836.     changed handle_connection() to ignore message 4 since the new napster
  2837.     v2.0beta5a sends it before the login command.
  2838.  
  2839.     search now ignores files belonging to the user who issued the command
  2840.  
  2841. 2000-01-29  drscholl  <drscholl@users.sourceforge.net>
  2842.  
  2843.     * README, main.c:
  2844.     handle_connection now prints out the message it received when it errors out
  2845.     becaues the client is not registered yet.
  2846.  
  2847.     * add_file.c:
  2848.     forgot to skip the backslash before sending the path to compute_soundex
  2849.  
  2850.     compute_soundex should skip nonalpha chars at the beginning of the string
  2851.  
  2852.     * ChangeLog, README, add_file.c, buffer.c, db.c, search.c:
  2853.     added support for soundex searches
  2854.  
  2855.     * Makefile.in, ban.c, login.c, main.c, spynap.c:
  2856.     login() was checking for CLASS_USER to set con->destroy when a banned user
  2857.     attempts to log in.  It should have been checking for CLASS_UNKNOWN since
  2858.     the connection is not registered yet.
  2859.  
  2860.     added some nice output to some of the server numerics to spynap
  2861.  
  2862. 2000-01-28  drscholl  <drscholl@users.sourceforge.net>
  2863.  
  2864.     * ChangeLog, README, config.c, main.c, opennap.h, sample.conf:
  2865.     added max_connections config variable
  2866.  
  2867.     * Makefile.in, buffer.c, debug.c, kill_user.c, login.c, main.c, opennap.h, sample.conf, server_connect.c, server_login.c, util.c:
  2868.     debug_valid should return 0 on buffer overrun
  2869.  
  2870.     handler routines should set con->destroy=1 instead of calling
  2871.     remove_connection() since handle_connection() has a cached copy of the
  2872.     pointer.  this is only necessary when destroying the connection for the
  2873.     source of the message being processed.  destroying other connections is
  2874.     perfectly fine.
  2875.  
  2876.     buffer_uncompress() should allocate 1 extra byte similar to buffer_read()
  2877.  
  2878.     * Makefile.am, Makefile.in, README, add_file.c, announce.c, ban.c, browse.c, buffer.c, change.c, client_quit.c, compress.c, config.c, configure, configure.in, debug.c, debug.h, download.c, hash.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, metaserver.c, motd.c, muzzle.c, network.c, opennap.h, part.c, patchnap.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, sample.conf, search.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c:
  2879.     major rewrite of i/o handling.  server->server links are now handled using
  2880.     a compressed stream.
  2881.  
  2882. 2000-01-27  drscholl  <drscholl@users.sourceforge.net>
  2883.  
  2884.     * NEWS, TODO, ping.c, sample.conf:
  2885.     final changes for 0.10 release.
  2886.  
  2887.     * README, db.c:
  2888.     primary key() can only be 256 bytes long, so change the nick length to 15
  2889.     and the filename length to 240.
  2890.  
  2891.     * ChangeLog, README, add_file.c, config.c, db.c, main.c, opennap.h, sample.conf:
  2892.     added max_shared variable to control how many files a user can share
  2893.  
  2894.     (owner,filename) is now the primary key to avoid duplicates.
  2895.  
  2896. 2000-01-26  drscholl  <drscholl@users.sourceforge.net>
  2897.  
  2898.     * util.c:
  2899.     max bytes per compression block was still set to debug level
  2900.  
  2901.     * Makefile.in, config.c, db.c, main.c, opennap.h, part_channel.c, sample.conf, util.c:
  2902.     fixed bug in calculate_chunk_length() where the size returned was the total
  2903.     length of the compressed data, and not the region.
  2904.  
  2905.     added max_compress configuration variable to control the maximum number of
  2906.     compressed packets to create in a single cycle, to avoid blocking client
  2907.     connections
  2908.  
  2909.     * compress.c, db.c, util.c:
  2910.     added additional error reporting to init_db()
  2911.  
  2912.     fixed bug in send_queued_data() when only a portion of the send buffer is
  2913.     compressed
  2914.  
  2915.     * network.c, util.c:
  2916.     the length of the compressed packet was 2 bytes too short
  2917.  
  2918.     moved my_ntoa() to network.c
  2919.  
  2920.     * README, compress.c, opennap.h, util.c:
  2921.     compressed_data() did not correctly handle the new packet format
  2922.  
  2923. 2000-01-25  drscholl  <drscholl@users.sourceforge.net>
  2924.  
  2925.     * Makefile.in, util.c:
  2926.     fixed send_queued_data() to ensure that compressed packets are less than
  2927.     65535 bytes long.
  2928.  
  2929.     * Makefile.in, configure, configure.in, network.c:
  2930.     COMPRESSDOTO should be set in the check for libz, not /dev/random
  2931.  
  2932.     * ChangeLog, main.c, network.c, opennap.h:
  2933.     set SO_KEEPALIVE on tcp sockets to detect dead clients
  2934.  
  2935.     * ban.c: ban() should notify mods+ of the ban
  2936.  
  2937.     * ban.c, free_user.c, join.c, muzzle.c, napster.txt, opennap.h, public.c, remove_connection.c, unmuzzle.c, util.c:
  2938.     various bugfixes.
  2939.  
  2940.     * main.c:
  2941.     should ignore EAGAIN on read() without closing the connection
  2942.  
  2943.     * add_file.c, remove_connection.c:
  2944.     bug fix in add_file()
  2945.  
  2946.     * ChangeLog, kill_user.c:
  2947.     elites should be able to kill other elites
  2948.  
  2949.     * free_user.c:
  2950.     fixed memory leak in free_user() where .server was not free'd
  2951.  
  2952.     * login.c, synch.c, util.c:
  2953.     sync_user() didn't send a proper user-ip packet
  2954.  
  2955.     * README, login.c, opennap.h:
  2956.     changed user-ip message to include the locally connected port and the server
  2957.     the user is connected to
  2958.  
  2959.     * Makefile.am, Makefile.in, TODO, login.c, main.c, network.c, opennap.h, server_connect.c, server_login.c:
  2960.     changed server connect to be nonblocking.  new file network.c contains most
  2961.     of the standard network routines.
  2962.  
  2963.     * ChangeLog:
  2964.     updated ChangeLog with today's changes
  2965.  
  2966.     * download.c, kill_user.c, level.c, main.c, opennap.h, server_connect.c, topic.c:
  2967.     fixed handle_connection() to not pass 404 messages to peer servers.
  2968.  
  2969.     added a 404 handler to notify the mods+ of the error message received
  2970.  
  2971.     added a 607 handler to pass the server message to a remote user
  2972.  
  2973.     * main.c, util.c:
  2974.     still more fixes for compressed data.
  2975.  
  2976.     * compress.c, config.c, main.c, opennap.h, sample.conf, util.c:
  2977.     added compression_threshold config var (default 8 kbytes) to controll when
  2978.     compression is applied in order to reduce load
  2979.  
  2980.     * Makefile.in, main.c, opennap.h, util.c:
  2981.     more fixes for compressed_data()
  2982.  
  2983.     * compress.c: fixed bug in compressed_data()
  2984.  
  2985.     * compress.c, main.c, util.c:
  2986.     another fix for compressed data packet.  the uncompressed lenght was
  2987.     overwriting the compressed length.
  2988.  
  2989.     * Makefile.in, sample.conf, util.c:
  2990.     fixed bug in send_queued_data() when compressing packets
  2991.  
  2992.     * Makefile.am, Makefile.in:
  2993.     needed to add compress.o to opennap_DEPENDENCIES to get it to compile
  2994.  
  2995.     * Makefile.in, TODO:
  2996.     added rcs id tag to Makefile.am
  2997.  
  2998.     * compress.c: forgot to add compress.c to cvs
  2999.  
  3000. 2000-01-24  drscholl  <drscholl@users.sourceforge.net>
  3001.  
  3002.     * Makefile.am, Makefile.in, README, configure.in, sample.conf, synch.c:
  3003.     sync_user() should not flush data to peer servers now that compression
  3004.     support is in place, since it will defeat the benefits
  3005.  
  3006.     sync_user() did not relay the client ip address.
  3007.  
  3008.     * Makefile.am, Makefile.in, config.c, configure, configure.in, main.c, sample.conf:
  3009.     fixes for optional compilation with libz, since its not needed for standalone
  3010.     servers.
  3011.  
  3012.     * ChangeLog, Makefile.am, Makefile.in, README, config.c, configure, configure.in, main.c, opennap.h, util.c:
  3013.     added compressed data (10200) message, and "compression_level" variable
  3014.  
  3015.     * ChangeLog, config.c, main.c, napster.txt, opennap.h, remove_connection.c, resume.c, search.c, server_connect.c, util.c:
  3016.     added client_queue_length and server_queue_length config variables to tune the
  3017.     maximum queue lengths allowed
  3018.  
  3019.     fixed resume messages which used broken sequences %ul and %uh
  3020.  
  3021.     added max_results server config variable to control the maximum number of
  3022.     matches returned on a client search
  3023.  
  3024.     * ChangeLog, Makefile.in, opennap.h, server_connect.c:
  3025.     added server version (801) support
  3026.  
  3027.     * TODO, server_connect.c:
  3028.     fixed test for fields[2] being set to argc==3 in notify_mods() call from
  3029.     server_connect()
  3030.  
  3031.     * ChangeLog, Makefile.in, configure, configure.in, main.c, metaserver.c, opennap.h, server_connect.c, util.c:
  3032.     metaserver should write a \n after the ip:port
  3033.  
  3034.     send_queued_data() should return without doing anything if there is no data
  3035.     to send
  3036.  
  3037.     added check for /dev/random and substitute simple random number generation
  3038.     on systems without it
  3039.  
  3040.     * ChangeLog, server_connect.c:
  3041.     server_connect() should check the return from split_line() to get the number
  3042.     of arguments
  3043.  
  3044.     * ChangeLog, Makefile.in, add_file.c, config.c, configure, configure.in, debug.c, debug.h, hotlist.c, join.c, login.c, main.c, napster.txt, opennap.h, part.c, ping.c, privmsg.c, remove_connection.c, resume.c, search.c, server_connect.c, upload_complete.c, util.c, whois.c:
  3045.     added additional integrity checking to the validate_*() functions in
  3046.     debug mode
  3047.  
  3048.     server variables can be dynamically changed using the 810 client message
  3049.     (colten edwards)
  3050.  
  3051.     login() should ensure that the given speed is in the 0-10 range
  3052.  
  3053.     search() was sending the host using %d instead of %lu
  3054.  
  3055.     CONFIG struct now holds default values for variables, and functions
  3056.     config_defaults() and free_defaults() is used to manage the memory
  3057.  
  3058.     added macro VALID_LEN to test a pointer for enough allocated memory
  3059.  
  3060.     * ChangeLog, config.c, main.c, opennap.h, sample.conf:
  3061.     added option to specify the maximum number of channels a user may join.
  3062.  
  3063. 2000-01-22  drscholl  <drscholl@users.sourceforge.net>
  3064.  
  3065.     * README, download.c, opennap.h, util.c, whois.c:
  3066.     whois prints the dotted-quad form of the ip address, not an integer
  3067.  
  3068.     * ChangeLog, join.c, main.c, opennap.h:
  3069.     enforce a 5 channel limit for users
  3070.  
  3071.     added cl option to allow only privileged users to create channels
  3072.  
  3073.     * kill_user.c, login.c, util.c, whois.c:
  3074.     fixed another crash in login()
  3075.  
  3076.     whois was checking the level of the person getting whois'ed, not the
  3077.     person issuing the whois
  3078.  
  3079. 2000-01-21  drscholl  <drscholl@users.sourceforge.net>
  3080.  
  3081.     * TODO, login.c, util.c:
  3082.     fix for bad password segfault in login
  3083.  
  3084.     * ChangeLog, hotlist.c, login.c:
  3085.     hotlist fix for users that are already logged in
  3086.  
  3087.     * ChangeLog, NEWS, README, login.c:
  3088.     fixed segfault in login().  split_line() does not write a 0 in the last
  3089.     element of the arrary, you have to check the return value for the size
  3090.  
  3091.     * README, main.c, opennap.h, privmsg.c, remove_connection.c, server_connect.c, server_login.c:
  3092.     added support for the server linking commands
  3093.  
  3094.     * level.c:
  3095.     backed out change because you cant set a level >= your own
  3096.  
  3097.     * level.c:
  3098.     fix so that users can set others to leech status
  3099.  
  3100.     * ChangeLog, TODO, ban.c, change.c, download.c, kill_user.c, level.c, login.c, muzzle.c, napster.txt, opennap.h, whois.c:
  3101.     ban did not record the time of the ban
  3102.  
  3103.     notify_mods changed to only notify local mods
  3104.  
  3105.     change data port command was not passed to peer servers
  3106.  
  3107.     added additional information to whois for moderators
  3108.  
  3109.     change set level command so that mods+ can change the level of a user below
  3110.     their level
  3111.  
  3112.     the 218-221 message were not passed to peer servers
  3113.  
  3114.     * ChangeLog, Makefile.am, Makefile.in, ban.c, login.c, main.c, opennap.h:
  3115.     added support for ban, unban and banlist (612, 614, 615, 616, 629)
  3116.  
  3117.     * README, db.c, login.c, opennap.h:
  3118.     login should report error on nick already in use to the client before
  3119.     disconnecting it
  3120.  
  3121. 2000-01-20  drscholl  <drscholl@users.sourceforge.net>
  3122.  
  3123.     * ChangeLog, README, TODO, announce.c, download.c, hash.h, kill_user.c, level.c, login.c, main.c, muzzle.c, opennap.h, server_connect.c, synch.c, topic.c, unmuzzle.c, whois.c:
  3124.     changed user level from bitmask to integer.
  3125.  
  3126.     kill and muzzle operations now notify all mods+
  3127.  
  3128.     added the wallop command (627)
  3129.  
  3130.     user levels are now leech, user, moderator, admin and elite.
  3131.  
  3132.     change server operator to elite instead of admin.
  3133.  
  3134.     * napster.txt, opennap.h:
  3135.     added some additional protocol information to napster.txt
  3136.  
  3137.     * metaserver.c:
  3138.     fixes for bsdi 4.1.  accept's 3rd arg should be socklen_t
  3139.  
  3140.     * login.c, main.c, opennap.h, server_connect.c:
  3141.     fixes for compilation under bsdi 4.1
  3142.  
  3143.     * ChangeLog, configure, configure.in, download.c, main.c, opennap.h, server_connect.c, util.c:
  3144.     endian checking was made more portable.  now use autoconf to define
  3145.     WORDS_BIGENDIAN where appropriate.
  3146.  
  3147.     * ChangeLog, main.c:
  3148.     update_stats() now prints a message to the log with the current total
  3149.     library size.
  3150.  
  3151.     * add_file.c, free_user.c, main.c, opennap.h, remove_file.c:
  3152.     server now stores internal library size in kilobytes to avoid rounding
  3153.     errors.
  3154.  
  3155.     * ChangeLog, FAQ, NEWS, README, hash.c, login.c:
  3156.     channel and user names are now case insensitive.
  3157.  
  3158.     * ChangeLog, Makefile.am, Makefile.in, configure, configure.in, hotlist.c, join.c, login.c, main.c, metaserver.c, opennap.h, search.c, server_connect.c, util.c:
  3159.     added additional debugging sanity checking for major structures.
  3160.  
  3161.     * ChangeLog, Makefile.am, Makefile.in, configure, configure.in, spynap.c:
  3162.     configure now will look for mysql in /usr/local as well as /usr
  3163.  
  3164.     * ChangeLog, TODO, hotlist.c, login.c, main.c, napster.txt, opennap.h, spynap.c, util.c:
  3165.     fixed hotlist bug which crashed the server.
  3166.  
  3167. 2000-01-19  drscholl  <drscholl@users.sourceforge.net>
  3168.  
  3169.     * ChangeLog, change.c, napster.txt, opennap.h:
  3170.     added support for the change speed command (700)
  3171.  
  3172.     * download.c, main.c, napster.txt, opennap.h, spynap.c:
  3173.     added support for 626 (data port error)
  3174.  
  3175.     added download support to spynap reference client
  3176.  
  3177. 2000-01-18  drscholl  <drscholl@users.sourceforge.net>
  3178.  
  3179.     * NEWS, README, spynap.c:
  3180.     began to add download support to spynap.  /search and /browse results are
  3181.     now cached, and you can do /get <n> to request a file.  downloading does not
  3182.     actually work yet.
  3183.  
  3184. 2000-01-17  drscholl  <drscholl@users.sourceforge.net>
  3185.  
  3186.     * ChangeLog, README, login.c, main.c, opennap.h, search.c, spyserv.c:
  3187.     login() did not set the user->host field so transfers between different
  3188.     machines would fail.
  3189.  
  3190.     format_request() did not terminate the output string.
  3191.  
  3192.     added 10013 numeric for passing the ip address of clients to peer servers
  3193.  
  3194. 2000-01-16  drscholl  <drscholl@users.sourceforge.net>
  3195.  
  3196.     * ChangeLog, download.c, main.c, napster.txt, opennap.h, search.c, spyserv.c, upload_complete.c:
  3197.     added support for downloading from firewalled clients (500,501)
  3198.  
  3199.     search patterns need to have %, ', _ and \ quoted in the SQL query
  3200.  
  3201. 2000-01-15  drscholl  <drscholl@users.sourceforge.net>
  3202.  
  3203.     * ChangeLog, Makefile.am, Makefile.in, download.c, download_ack.c, main.c, napster.txt, opennap.h, spyserv.c, upload_complete.c:
  3204.     fixed download problem where the 204 message was sending the information
  3205.     for the person making the request, not the person holding the file.
  3206.  
  3207.     added -l option to specify the local port on the spyserv agent
  3208.  
  3209.     * ChangeLog, configure, configure.in, db.c, download.c, download_ack.c, main.c, opennap.h, upload_complete.c:
  3210.     fixed several of the download numerics since they were not doing what
  3211.     the protocol specifies.
  3212.  
  3213. 2000-01-14  drscholl  <drscholl@users.sourceforge.net>
  3214.  
  3215.     * add_file.c, download.c, main.c, opennap.h, util.c:
  3216.     fixed DOS filename quoting in download()
  3217.  
  3218.     added SO_REUSEADDR option to main socket
  3219.  
  3220.     * add_file.c:
  3221.     single quote needs to be escaped too.
  3222.  
  3223.     * add_file.c, spynap.c:
  3224.     DOS backslashes need to be quoted before adding to the SQL database.
  3225.  
  3226.     * patchnap.c:
  3227.     offset was off by one in patchnap.c
  3228.  
  3229.     * ChangeLog:
  3230.     post release changelog update (oops)
  3231.  
  3232.     * hotlist.c:
  3233.     hotlist contains list of CONNECTION, not USER.
  3234.  
  3235.     * configure, configure.in:
  3236.     updated configure.in to version 0.07
  3237.  
  3238.     * AUTHORS, Makefile.am, Makefile.in, NEWS, announce.c, client_quit.c, close_db.c, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, metaserver.c, motd.c, muzzle.c, opennap.h, part_channel.c, patchnap.c, remove_connection.c, remove_file.c, resume.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, unmuzzle.c, upload_complete.c:
  3239.     final email address fixes in copyright notices
  3240.  
  3241.     removed spyserv and spynap from the default build list.  now we just include
  3242.     the sources.
  3243.  
  3244.     updated to version 0.07.
  3245.  
  3246. 2000-01-13  drscholl  <drscholl@users.sourceforge.net>
  3247.  
  3248.     * change.c:
  3249.     forgot to add change.c to the CVS repository
  3250.  
  3251.     * configure, configure.in, main.c, util.c, NEWS, config.c:
  3252.     updated some more email addresses in the copyright notices
  3253.  
  3254.     updated version number to 0.06
  3255.  
  3256.     * ChangeLog, Makefile.am, Makefile.in, TODO, add_file.c, browse.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, napster.txt, opennap.h, part.c, ping.c, privmsg.c, public.c, search.c, spynap.c, topic.c, whois.c:
  3257.     fixed email address in many copyright notices
  3258.  
  3259.     added support for the change data port (703) command
  3260.  
  3261.     added #define for HANDLER to be used as a prototype for all protocol handler
  3262.     routines
  3263.  
  3264. 2000-01-12  drscholl  <drscholl@users.sourceforge.net>
  3265.  
  3266.     * TODO, debug.h, hash.h, main.c, opennap.h, spynap.c:
  3267.     fixed copyright notices on some files.
  3268.  
  3269.     fixed segmentation fault in new read() loop in handle_connection().
  3270.  
  3271.     fixed broken /browse command in spynap.
  3272.  
  3273.     * ChangeLog, Makefile.in, main.c, opennap.h, remove_connection.c:
  3274.     each connection is now given its own input buffer so that we can use
  3275.     nonblocking read() calls.
  3276.  
  3277.     * ChangeLog, TODO, add_file.c, remove_file.c, search.c, spynap.c, util.c:
  3278.     array_add() should not assert if the list is empty
  3279.  
  3280.     server was reporting library size in MB, not GB
  3281.  
  3282.     search strings should have spaces converted to % for SQL queries
  3283.  
  3284.     added a /msg command to the spynap sample client
  3285.  
  3286. 2000-01-11  drscholl  <drscholl@users.sourceforge.net>
  3287.  
  3288.     * spynap.c:
  3289.     Updated the spynap client application to add a few more text commands for
  3290.     easier use in testing other numerics.
  3291.  
  3292.     * AUTHORS, NEWS, add_file.c, announce.c, browse.c, client_quit.c, config.c, db.c, debug.c, download.c, download_ack.c, free_user.c, hash.c, hotlist.c, join.c, kill_user.c, level.c, list_channels.c, list_users.c, login.c, main.c, metaserver.c, motd.c, muzzle.c, napster.txt, part.c, part_channel.c, ping.c, privmsg.c, public.c, remove_connection.c, remove_file.c, resume.c, search.c, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c, whois.c:
  3293.     Updated copyright notice to reflect new year and new email address.
  3294.  
  3295.     * .indent.pro, FAQ, client_quit.c, create_db.sql, global.h, hotlist.c, level.c, list_channels.c, list_users.c, md5.h, md5c.c, metaserver.c, muzzle.c, napster.txt, ping.c, remove_file.c, resume.c, sample.conf, sample.motd, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c:
  3296.     Initial import of the opennap-0.05 work in progress.
  3297.  
  3298.     * .indent.pro, FAQ, client_quit.c, create_db.sql, global.h, hotlist.c, level.c, list_channels.c, list_users.c, md5.h, md5c.c, metaserver.c, muzzle.c, napster.txt, ping.c, remove_file.c, resume.c, sample.conf, sample.motd, server_connect.c, server_login.c, spynap.c, spyserv.c, synch.c, topic.c, unmuzzle.c, upload_complete.c, util.c:
  3299.     New file.
  3300.  
  3301.     * add_file.c, announce.c, browse.c, close_db.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, install-sh, join.c, kill_user.c, login.c, main.c, missing, mkinstalldirs, motd.c, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, search.c, whois.c:
  3302.     Initial import of the opennap-0.05 work in progress.
  3303.  
  3304.     * add_file.c, announce.c, browse.c, close_db.c, config.c, configure, configure.in, db.c, debug.c, debug.h, download.c, download_ack.c, free_user.c, hash.c, hash.h, install-sh, join.c, kill_user.c, login.c, main.c, missing, mkinstalldirs, motd.c, opennap.h, part.c, part_channel.c, privmsg.c, public.c, remove_connection.c, search.c, whois.c:
  3305.     New file.
  3306.  
  3307.     * INSTALL, Makefile.am, NEWS, TODO, aclocal.m4:
  3308.     Initial import of the opennap-0.05 work in progress.
  3309.  
  3310.     * INSTALL, Makefile.am, NEWS, TODO, aclocal.m4:
  3311.     New file.
  3312.  
  3313.     * AUTHORS, COPYING, ChangeLog, Makefile.in, README:
  3314.     Initial import of the opennap-0.05 work in progress.
  3315.  
  3316.     * AUTHORS, COPYING, ChangeLog, Makefile.in, README:
  3317.     New file.
  3318.  
  3319.